应用程序在后台被杀死
Posted
技术标签:
【中文标题】应用程序在后台被杀死【英文标题】:Application is being killed while on background 【发布时间】:2013-09-18 04:03:43 【问题描述】:我的应用程序将 gps 更新发送到 API。我需要我的应用程序一直在后台运行。但不幸的是,我的应用程序总是在后台的某个时间点结束。我读过,当应用程序的 cpu 使用率低时,应用程序会自动被杀死。我不希望这种情况发生。我已经使用以下代码在我的应用程序中的 onCreate 方法中包含了部分唤醒锁:
powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
然后暂停:
protected void onPause()
super.onPause();
onBackground = true;
wakeLock.acquire();
Log.w("OnPause", "OnPause");
我真的不知道如何防止我的应用程序被杀死。我也尝试过使用完全唤醒锁,但它已被弃用。关于如何让我的应用程序在后台保持活跃的任何想法?我从不希望我的。谢谢!
【问题讨论】:
【参考方案1】:你不能。
只要确保,你坚持任何应该在被杀后幸存下来的东西。
对于应该在后台运行的任何内容,即使应用程序未向用户显示:
使用Service
并将其设置为前台模式。
【讨论】:
这是否意味着在某些时候,应用程序将被杀死? 是的,这是很自然的事情。 android 会处理这个问题。在这里阅读更多:developer.android.com/training/basics/activity-lifecycle/… 问题是:除了缓存以更快地恢复之外,不杀死暂停的活动是没有意义的。如果你真的想在后台运行代码,服务就是你想要的。【参考方案2】:public class BGService extends Service
private PowerManager powerManager;
private WakeLock wakeLock;
@Override
public void onCreate()
// TODO Auto-generated method stub
super.onCreate();
powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakeLock");
wakeLock.acquire();
在您的主要活动中调用并启动服务
public class SendSMSActivity extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.demo);
startService(new Intent(this, BGService.class));
【讨论】:
你能解释一下这对我的唤醒锁有什么影响吗?谢谢! 您在服务中的 wack lock 调用。并且此服务将在应用启动时启动后台。您解决了您的问题吗?以上是关于应用程序在后台被杀死的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使我在后台请求位置更新,我的 iOS 应用程序也会被杀死?
即使应用程序在 ios 中被杀死或从后台删除,如何继续更新我的位置?
onMessageReceived(RemoteMessage remoteMessage) 应用程序在后台或被杀死时不调用