应用程序在后台被杀死

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 中被杀死或从后台删除,如何继续更新我的位置?

后台服务在android中被杀死

onMessageReceived(RemoteMessage remoteMessage) 应用程序在后台或被杀死时不调用

当应用程序在颤动中被杀死/终止时,从后台事件启动应用程序