我正在编写一个包含多项活动的Android应用程序。当应用程序恢复时,应用程序需要向服务器办理登机手续。 (从锁定的屏幕或从不同的应用程序切换等新的开始)。换句话说,相同的东西需要进入所有活动的onResume()。
如果办理登机手续失败,办理登机手续涉及启动AsyncTask并提示输入用户名/密码等。
我通过在每个活动上保持相同的onResume()方法来工作(即在所有活动中复制签入代码)。当然有更好的方法来做到这一点。它是什么?
答案 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中您可以执行您想要的操作。当您的任何活动恢复时,它会被调用。
祝你好运!