android – 区分推“home”按钮和打开另一个Activity

我有三个活动:
  – SplashActivity
 – 主要活动
  – PlayerActivity

当然应用程序以SplashActivity开头,然后启动MainActivity并关闭.
MainActivity在某个时刻启动了PlayerActivity并进入了Backstack. (MainActivity还活着,但是在onStop上)
然后我需要打开MainActivity并将PlayerActivity设置为后台(PlayerActivity是活着的但是在onStop上).
然后我需要再次打开PlayerActivity并将MainActivity设置为background.

因此,当app将一个切换到另一个并返回时,PlayerActivity和MainActivity经常在没有onDestroy的情况下获得onPause()和onStop().

每次当用户按下“home”按钮时,我需要完成所有活动并启动SplashActivity应用程序,但主页按钮与活动之间的切换(onPause()和onStop())相同.所以我无法发现杀死活动的不同之处.

请帮忙.

编辑:
不幸的是,onUserLeaveHint没有帮助,它是一样的.
如果User推送HOME,则调用

onUserInteraction,
onUserLeaveHint,
在onPause,
的onStop

此活动返回上一个活动(主),没有任何用户操作.

public class PlayerActivity扩展Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(PlayerActivity.this,MyActivity.class));
        }
    },5000);
}

}

但仍然有相同的:

onUserInteraction,
的onStop

最佳答案
据我所知,没有办法覆盖主页按钮或听主页按钮事件.

但是,您的目标是让应用程序知道并在发生以下情况时采取措施:

>您的所有活动均未显示 – >您的一项活动正在展示.

发生这种情况时,您需要显示启动对话框.

您可以跟踪用户何时在您的应用程序中,并检查用户是否从您的应用程序导航到您的活动.

更新:您可以使用ActivityLifecycleCallbacks对象来了解何时调用任何活动的生命周期回调,而不是像下面的示例所示修改所有活动.你可以拿我的例子并修改它.我相信在super.onStart()调用之后调用ActivityLifecycleCallbacks.onActivityStarted(),因此在调用Activity.onStart()中的super.onStart()之前,必须检查cameFromMyApplication().这不容易出错,需要的代码更少.

Modified 07001 to fit this question

Example
Implement custom Application class:

public class MyApplication extends Application {

  public static boolean cameFromMyApplication() {
    return count != 0;
  }  

  public static void activityStarted() {
    count++;
  }

  public static void activityStopped() {
    count--;
  }

  private static int count;
}

Register your application class in AndroidManifest.xml:

Add onStart and onStop to every Activity in the project (you may
create a common ancestor for your Activities if you’d like to):

@Override
protected void onStart() {
  super.onStart();
  //Do not include this check in the splash screen Activity
  if(!MyApplication.cameFromMyApplication()) {
    //User arrived from outside the application
    //Application specific code (clear Activity backstack & show splash screen in your case)
  }
  MyApplication.activityStarted();
}

@Override
protected void onStop() {
  super.onStop();
  MyApplication.activityStopped();
}

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...