我正在开发一个作为服务运行的应用程序并等待消息.检查完日志后,我发现Android会经常杀死并重启很多进程!这不仅发生在我的应用程序中,而且对于许多其他服务也是如此.
我看不出任何原因,我的设备有足够的内存.我使用运行Android 4.0.4的Sony Xperia S进行测试.这是正常还是错误?
这是日志的一部分,向您展示我的意思:
02-04 15:02:38.791 320 332 I ActivityManager:进程com.android.email(pid 32763)已经死亡. 02-04 15:02:38.791 320 332 W ActivityManager:在5000ms内调度崩溃服务com.android.email/.service.MailService的重启
.... 13分钟后:
02-04 15:15:32.601 320 694 I ActivityManager:进程com.android.email(pid 1453)已经死亡.
这是正常的,操作系统会这样做.
为什么?在非活动或后台运行时,每个应用程序或服务都会保留在内存中,直到Android内存管理器确定它要么占用太多内存,或者其他活动应用程序/服务需要它.例如,home当您在电子邮件应用程序中时按下按钮.它将返回到重新打开应用程序时的确切位置.因为这个应用程序只是暂停并在内存中处于某种休眠模式.除非Android需要为其他任何东西分配内存,否则它会保留它.
一种确保操作系统不会终止服务的方法是创建一个持久的服务.
如果您正在开发系统应用程序,则只能使您的服务持久化.这些服务基本上是不可杀死的,并在"adb shell dumpsys activity"命令的输出中标记为"PERS".
http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/
但:
请使用AlarmManager和IntentService,所以你的服务不需要在内存中,除非它正在做有意义的工作.这也意味着Android在内存中不太可能会破坏您的服务,并且用户不太可能因为他们认为您在浪费内存而终止您的服务.
| 归档时间: |
|
| 查看次数: |
12259 次 |
| 最近记录: |