Android:恢复应用时执行某些操作

时间:2016-06-24 16:15:17

标签: android android-lifecycle

我正在编写一个包含多项活动的Android应用程序。当应用程序恢复时,应用程序需要向服务器办理登机手续。 (从锁定的屏幕或从不同的应用程序切换等新的开始)。换句话说,相同的东西需要进入所有活动的onResume()。

如果办理登机手续失败,办理登机手续涉及启动AsyncTask并提示输入用户名/密码等。

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

3 个答案:

答案 0 :(得分:1)

这取决于您的使用案例。如果您的所有活动都需要相同的功能,则可以创建基本活动。您的所有活动都将扩展它。将此逻辑移至基本活动onResume(),然后您的所有活动都将具有此逻辑。

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

答案 1 :(得分:1)

你可以创建一个基本活动,例如:

public abstract class BaseActivity extends AppCompatActivity {

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

}

您的所有活动都应该从BaseActivity继承,如:

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

答案 2 :(得分:0)

如果您需要检查所有活动select t1.* from T1 WHERE T1.id is not null; ,您可以定义BaseActivity并扩展您的所有活动,并在基础活动的onResume()中扩展您的活动。

onResume

但是,如果你只需要恢复你的应用程序就可以完成任务,那么事情可能会变得更复杂一些。当您的应用恢复时,没有直接的方法可以调用。

因此,您可以在public abstract class BaseActivity extends AppCompatActivity { @Override protected void onResume() { super.onResume(); // do your stuff here } } 类中创建自定义组件回调,如下所示:

Application

并创建一个自定义活动生命周期回调,如下所示:

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() {

      }
   }

在Application类中定义一个静态布尔字段,如下所示:注册回调。

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) {

    }
    //...
}

在应用程序的private static boolean isAppWillResume = true; 中注册您的自定义回调:

onCreate

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

编辑:顺便说一句,如果您不想使用BaseActivity扩展所有活动,您只能注册我写的自定义回调,并且在onResume中您可以执行您想要的操作。当您的任何活动恢复时,它会被调用。

祝你好运!