我有三个活动:
– 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();
}