Android:应用程序全局onPause()和onResume()?

znq*_*znq 15 lifecycle gps android geolocation

有什么样的应用程序的全局onPause()onResume()

我的主要活动是监听GPS修复,我想在切换到另一个屏幕/活动时继续工作.因此,我不能LocationListener在活动中取消注册onPause().但是,我仍然希望在切换到另一个应用程序时取消注册我的GPS监听器(因此节省电池)并在返回我的应用程序时将其重新打开,无论用户当前处于何种屏幕/活动状态.

有任何想法吗?

Com*_*are 12

有没有像应用程序全局onPause()和onResume()?

不,对不起

我的主要活动是监听GPS修复,我想在切换到另一个屏幕/活动时继续工作.因此,我无法在活动的onPause()中取消注册我的LocationListener.但是,我仍然希望在切换到另一个应用程序时取消注册我的GPS监听器(因此节省电池)并在返回我的应用程序时将其重新打开,无论用户当前处于何种屏幕/活动状态.

这是一种可能的方法:

步骤#1:将LocationListener逻辑移动到a Service,活动通过本地绑定模式连接到其中.还至少有一个服务调用startService(),因此unbindService()不会导致它Service消失(假设您正在使用本地绑定模式).

步骤2:让活动在onPause()和期间调用服务onResume().

步骤3:让服务保持未完成活动的参考计数.

步骤#4:当引用计数达到零时,让服务安排通过Timer和唤醒TimerTask.此外,TimerTask如果引用计数增加,则取消任何此类未完成的.

步骤#5:TimerTask如果它被执行则关闭GPS.

网络是你只会在一定程度的不活动后释放GPS.这种不活动可能是出于任何原因.


Dro*_*rap 5

您可以创建一个应用程序类,如果它实现了Application.ActivityLifecycleCallbacks

public class AppController extends Application implements Application.ActivityLifecycleCallbacks
{

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        Toast.makeText(this, "----------onCreate()---------", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onActivityStarted(Activity activity) {
        Log.i("ApplicationName","----------onActivityStarted()---------");
    }

    @Override
    public void onActivityResumed(Activity activity) {
        Log.i("ApplicationName","----------onActivityResumed()---------");
    }

    @Override
    public void onActivityPaused(Activity activity) {
        Toast.makeText(this, "----------onActivityPaused()---------", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onActivityStopped(Activity activity) {
        Log.i("ApplicationName","----------onActivityStopped()---------");
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        Log.i("ApplicationName","----------onActivitySaveInstanceState()---------");
    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}
Run Code Online (Sandbox Code Playgroud)

然后从您的活动中致电

@Override
protected void onPause() {
    AppController controller=(AppController)getApplicationContext();
    controller.onActivityPaused(Main3Activity.this);
    super.onPause();
}
Run Code Online (Sandbox Code Playgroud)