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 恢复时被调用。
祝你好运!
我正在编写一个包含多个活动的 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 恢复时被调用。
祝你好运!