Android 检查启动新活动时是否调用了activity onStop
我正在努力解决一个问题。在我的应用程序中,我需要确定调用Android 检查启动新活动时是否调用了activity onStop,android,performance,android-activity,android-lifecycle,Android,Performance,Android Activity,Android Lifecycle,我正在努力解决一个问题。在我的应用程序中,我需要确定调用onStop方法是因为启动了一个新活动,还是在用户单击主页按钮或切换到另一个应用程序后调用了该方法 我有BaseActivity类,我需要在这里检查它 我试图找到一种方法来做到这一点,但不幸的是仍然没有找到解决办法 也许有一个解决办法 其思想是区分onStop方法调用的发起方 如有任何帮助,我将不胜感激。您可以使用SharedReferences查看: @Override protected void onStop() {
onStop
方法是因为启动了一个新活动,还是在用户单击主页按钮或切换到另一个应用程序后调用了该方法
我有BaseActivity类,我需要在这里检查它
我试图找到一种方法来做到这一点,但不幸的是仍然没有找到解决办法
也许有一个解决办法
其思想是区分onStop
方法调用的发起方
如有任何帮助,我将不胜感激。您可以使用SharedReferences查看:
@Override
protected void onStop() {
super.onStop();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
pref.edit().putBoolean("IfOnStopCalled", true).apply();
}
签入您的基本活动:
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
Boolean IfOnStopCalled = pref.getBoolean("IfOnStopCalled",false);
if(IfOnStopCalled){
//Do your action
}
else{
//Do your action
}
一种可能的解决方案是注册ActivityLifecycleCallbacks并保存上次调用onResume的活动的引用名称:
public class ActivityChecker implements Application.ActivityLifecycleCallbacks {
private static ActivityChecker mChecker;
private String mCurrentResumedActivity = "";
public static ActivityChecker getInstance() {
return mChecker = mChecker == null ? new ActivityChecker() : mChecker;
}
// If you press the home button or navigate to another app, the onStop callback will be called without touching the mCurrentResumedActivity property.
// When a new activity is open, its onResume method will be called before the onStop from the current activity.
@Override
public void onActivityResumed(Activity activity) {
// I prefer to save the toString() instead of the activity to avoid complications with memory leaks.
mCurrentResumedActivity = activity.toString();
}
public boolean isTheLastResumedActivity(@NonNull Activity activity) {
return activity.toString().equals(mCurrentResumedActivity);
}
// [...] All other lifecycle callbacks were left empty
}
可以在应用程序类中注册ActivityLifecycleCallbacks:
public class App extends Application {
public App() {
registerActivityLifecycleCallbacks(ActivityChecker.getInstance());
}
}
别忘了在您的舱单中注册:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.package.name">
<application
...
android:name=".App"
> ...
</application>
</manifest>
参考文献:
注册自定义应用程序类和ActivityLifecycleCallbacks:
写了这篇文章后,我找到了这个链接,其中有一些其他选项可以检索当前恢复的活动:。您可以添加一个
受保护的布尔值otherActivityCalled=false当您启动此otherActivity
时,code>将此项设置为true
,并在您的onStop
钩子中进行检查。如果false
则表示您的currentActivity
由于其他原因已停止。
public class MyBaseActivity {
@Override protected void onStop() {
if(ActivityChecker.getInstance().isTheLastResumedActivity(this)) {
// Home button touched or other application is being open.
}
}
}