Android: 当应用程序恢复时做一些事情

Android: Do something when app is resumed

我正在编写一个包含多个活动的 android 应用程序。当应用程序处于 'resumed' 时(无论是重新启动、从锁定屏幕还是从其他应用程序切换等),该应用程序需要向服务器登记。换句话说,相同的东西需要进入所有活动的 onResume()。

签入涉及启动 AsyncTask 并在签入失败时提示 username/password 等。

我通过在每个 activity 上保持相同的 onResume() 方法来工作(即在所有活动中复制签入代码)。当然有更好的方法来做到这一点。这是什么?

这取决于您的用例。如果您的所有活动都需要相同的功能,您可以创建一个基础 activity。你所有的活动都会延长它。将此逻辑移动到基础 activity 的 onResume() 中,然后您的所有活动都将具有此逻辑。

如果该方法不起作用,您可以尝试将此逻辑移动到一个单独的控制器中 class,然后在所有需要它的活动中使用它。这样更灵活一些,可以帮助您避免代码重复。

您可以创建一个基础 activity 例如:

public abstract class BaseActivity extends AppCompatActivity {

@Override
protected void onResume() {
    super.onResume();
    /* your code here*/
}

}

您的所有 Activity 都应继承自 BaseActivity,例如:

public class MainActivity extends BaseActivity {
/* your code */
}

如果您需要检查您的所有活动 onResume() 您可以定义一个 BaseActivity 并由此扩展您的所有活动,并且在您的 Base activity 的 onResume 中您可以做您的东西。

public abstract class BaseActivity extends AppCompatActivity {

     @Override
     protected void onResume() {
        super.onResume();
        // do your stuff here
     }
}

但是,如果您需要在只有您的应用程序恢复时执行您的操作,事情可能会变得有点复杂。当您的应用程序恢复时,没有直接调用的方法。

因此您可以在 Application class 中创建自定义组件回调,如下所示:

public class CustomComponentCallback implements ComponentCallbacks2 {

      @Override
      public void onTrimMemory(int level) {
         if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
            isAppWillResume = true;
         }
      }

      @Override
      public void onConfigurationChanged(Configuration newConfig) {

      }

      @Override
      public void onLowMemory() {

      }
   }

并创建自定义 activity 生命周期回调,如下所示:

private static final class CustomLifecycleCallbacks implements ActivityLifecycleCallbacks {
    @Override
    public void onActivityResumed(Activity activity) {
        if(isAppWillResume){
           // do your staff
           isAppWillResume = false;
        }
    }

    @Override
    public void onActivityPaused(Activity activity) {

    }
    //...
}

在您的应用程序中定义一个静态布尔字段 class,如下所示:注册您的回调。

private static boolean isAppWillResume = true;

并在您的应用程序的 onCreate 中注册您的自定义回调:

registerComponentCallbacks(new CustomComponentCallback());
registerActivityLifecycleCallbacks(new CustomLifeCycleCallbacks());

我不确定这是否是检测应用程序是否恢复的最佳做法,但这个解决方案对我有用。

编辑:顺便说一下,如果您不想使用 BaseActivity 扩展您的所有活动,您只能注册一个我写的自定义回调,在 onResume 中您可以做任何您想做的事。它会在 任何 activity 恢复时被调用。

祝你好运!