我以前认为Android操作系统只能杀死整个应用程序进程,但最近有人告诉我,在某些情况下,操作系统也可以在保持{{1}的同时终止Service
完好无损。
所以,我的问题是:假设我在与我的Android应用程序的其余部分相同的进程中启动(使用Application
)本地startService
,这可能会被操作系统Service
杀死独立于应用程序的其余部分(即Service
被杀死并被销毁,但Service
对象保持不变??
如果可能出现这种情况,那么什么条件会影响Application
被杀的可能性?我可以防止这种情况发生吗?
请使用参考和/或“概念证明”代码段来支持您的答案。
答案 0 :(得分:0)
我从来没有听说Android会破坏流程的特定组成部分而不是整个流程,而且从未在实践中发现过这种情况。相反,Android会分析您的应用程序组件的状态,以确定您的进程是否可能被杀死以回收内存。查看文档 - Processes and Threads了解详细信息 - 文档没有说明是否会破坏特定组件。
此外,有一篇好文章Who lives and who dies,作者明确指出 Android只会杀死进程,而不是组件,但遗憾的是,没有进化这个主题。
顺便说一下,您在哪里阅读/了解Service
可能会在整个过程中被杀死的某些情况?
答案 1 :(得分:-1)
Service
独立于Application
。有两种方法可以处理Service
被杀死
START_STICKY
如果您在START_STICKY
中返回onStartCommand()
,系统会在杀死服务后尝试重新创建您的服务。同样的意图将通过。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
前台服务是一种服务,被认为是用户积极意识到的东西,因此在内存不足时不会被系统杀死。
在onStartCommand()
中拨打startForeground()
以在前台启动Service
,但会显示状态栏的通知
Notification notification = new Notification(R.drawable.icon,
getText(R.string.ticker_text), System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
getText(R.string.notification_message), pendingIntent);
startForeground(ONGOING_NOTIFICATION_ID, notification);