是否存在类似全局应用onPause()
和onResume()
的内容?
我的主要活动是监听GPS修复,我想在切换到另一个屏幕/活动时继续工作。因此,我无法取消注册活动LocationListener
中的onPause()
。但是,我仍然希望在切换到另一个应用程序时取消注册我的GPS监听器(以节省电池)并在返回我的应用程序时重新打开它,无论用户当前处于什么屏幕/活动。
有什么想法吗?
答案 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();
}