【问题标题】:Which activity is called when app removed from recent list in android?从 android 的最近列表中删除应用程序时调用哪个活动?
【发布时间】:2017-02-22 06:34:53
【问题描述】:

android 项目中有几个活动。但是,当从应用列表中删除应用时,肯定会调用哪个活动。

我检查了以下问题。但所有这些问题都是特定于活动或服务的

How to handle code when app is killed by swiping in android?

How to detect app removed from the recent list

What method is being called when I close an app

【问题讨论】:

  • 没有调用此类活动。但是在堆栈中或正在运行的所有活动的offcourse onDestroy方法都会被调用。
  • @AnkushBist 实际上这不是真的。从最近的任务列表中滑动应用程序通常只会导致 Android 终止托管应用程序的操作系统进程以及所有活动、服务等。在这种情况下,根本不会调用 onDestroy()

标签: android android-layout android-studio


【解决方案1】:

我也陷入了非常相似的场景,我需要跟踪用户从最近列表中删除应用程序的哪个活动,所以进入正题

第 1 步:

创建类ApplicationLifeCycleHandler并实现Application.ActivityLifecycleCallbacksComponentCallbacks2

public class ApplicationLifeCycleHandler implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 {
  private static final String TAG = "AppLifeCycleShareTime";
  private static boolean isInBackground = false;

  @Override
  public void onActivityCreated(Activity activity, Bundle bundle) {
    Log.d( TAG  , "onActivityCreated");
  }

  @Override
  public void onActivityStarted(Activity activity) {
    Log.d( TAG  , "onActivityStarted");
  }

  @Override
  public void onActivityResumed(Activity activity) {
    Log.d(  TAG , "onActivityResumed : " + ShareTime.currentActivity.getClass().getName());
    if(isInBackground){
      Log.d(TAG, "app went to foreground");
      isInBackground = false;
    }
  }

  @Override
  public void onActivityPaused(Activity activity) {
    Log.d(  TAG  , "onActivityPaused : " + activity.getClass().getName());
  }

  @Override
  public void onActivityStopped(Activity activity) {
    Log.d( TAG , "onActivityStopped : " + activity.getClass().getName());
  }

  @Override
  public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
    Log.d(  TAG  , "onActivitySaveInstanceState");
  }

  @Override
  public void onActivityDestroyed(Activity activity) {
    Log.d( TAG , "onActivityDestroyed Parent : " + activity.getClass().getName());
  }

  @Override
  public void onConfigurationChanged(Configuration configuration) {
    Log.d( TAG , "onConfigurationChanged");
  }

  @Override
  public void onLowMemory() {
    Log.d( TAG , "onLowMemory");
  }

  @Override
  public void onTrimMemory(int i) {
    Log.d( TAG  , "onTrimMemory");
    if(i == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN){
      Log.d(TAG, "app went to background");
      isInBackground = true
    }
  }
}

现在:创建类 MyApplication 并将其扩展到应用程序:

public class MyApplication extends Application {
  public static FileMetadata file;

  @Override
  public void onCreate() {
    super.onCreate();
    ApplicationLifeCycleHandler handler = new ApplicationLifeCycleHandler();
    registerActivityLifecycleCallbacks(handler);
    registerComponentCallbacks(handler);
  }
}

第 3 步: 打开 Manifest 文件并将android:name="MyApplication" 添加到应用程序标签。

第 4 步: 查看onActivityDestroyed 的日志,您将知道正在销毁的活动的名称。

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多