我有三个 Activity :
-SplashActivity
- 主要 Activity
-PlayerActivity
当然,该应用程序以SplashActivity开始,然后启动MainActivity并关闭。
稍后,MainActivity将启动PlayerActivity并返回到后堆栈。 (MainActivity仍然存在,但处于onStop状态)
然后,我需要打开MainActivity并将PlayerActivity设置为背景(PlayerActivity处于 Activity 状态,但处于onStop状态)。
然后,我需要再次打开PlayerActivity并将MainActivity设置为背景。
因此,当应用程序一个切换到另一个并返回时,PlayerActivity和MainActivity通常会获得onPause()和onStop()而没有onDestroy。
每当用户按下“主页”按钮时,我都需要完成所有 Activity 并启动SplashActivity的应用程序,但是主页按钮的作用类似于在 Activity 之间进行切换(onPause()和onStop())。因此我无法捕获差异来杀死 Activity 。
请帮忙。
编辑:
不幸的是,onUserLeaveHint上的无济于事,它是一样的。
如果用户按下HOME键,则会调用:
onUserInteraction,
onUserLeaveHint,
暂停,
onStop
此 Activity 返回先前的 Activity (主要),而没有任何用户操作。
公共(public)类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,
onUserLeaveHint,
暂停,
onStop
最佳答案
据我所知,没有任何方法可以覆盖主页按钮或监听主页按钮按下事件。
但是,您的目标是让应用程序知道并在发生以下情况时采取措施:
发生这种情况时,您想显示一个启动对话框。
您可以跟踪用户何时在应用程序中,并检查用户是否从应用程序内导航到您的 Activity 。
更新:您可以使用ActivityLifecycleCallbacks对象来知道何时调用任何Activity的生命周期回调,而不必像下面的示例所示那样修改所有Activity。您可以以我的示例为例进行修改。我相信ActivityLifecycleCallbacks.onActivityStarted()是在调用super.onStart()之后调用的,因此您必须在调用Activity.onStart()中的super.onStart()之前检查cameFromMyApplication()。这不太容易出错,并且需要更少的代码。
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;
}
<application
android:name="your.app.package.MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name" >
@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();
}