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

时间:2010-01-14 12:43:52

标签: android geolocation gps lifecycle

是否存在类似全局应用onPause()onResume()的内容?

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

有什么想法吗?

2 个答案:

答案 0 :(得分:12)

  

是否有类似应用程序的东西   global onPause()和onResume()?

不,抱歉。

  

我的主要活动是收听GPS   修复,我想继续   切换到另一个时工作   屏幕/活动。因此,我不能   取消注册我的LocationListener   activity的onPause()。不过我还是   想取消注册我的GPS听众   切换到另一个应用程序时   (这样可以节省电量)并将其转回   在返回我的申请时,   无论什么屏幕/活动   用户目前在。

这是一种可行的方法:

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

步骤2:让活动在onResume()TimerTask期间调用服务。

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

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

步骤5:让{{1}}关闭GPS,如果它被执行了。

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

答案 1 :(得分:4)

您可以创建应用程序类,如果它实现了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) {

    }
}

然后从您的活动中拨打电话

@Override
protected void onPause() {
    AppController controller=(AppController)getApplicationContext();
    controller.onActivityPaused(Main3Activity.this);
    super.onPause();
}