我正在运行alarmManager,我需要从3个不同的SQLite DB中获取数据,具体取决于我需要显示通知的条件。通知可能一次超过5个。我收到错误:跳过9622帧!应用程序可能在其主线程上做了太多工作。应用程序也将停止。有没有办法运行alarmManager以线程或异步方式显示通知,以便我不会损害应用程序性能。
答案 0 :(得分:0)
你应该:
在getBroadcast()
上使用PendingIntent
创建PendingIntent
以传递给AlarmManager
上的方法
让广播Intent
指向WakefulBroadcastReceiver
让接收者致电startWakefulService()
,Intent
指向您工作的IntentService
在IntentService
completeWakefulIntent()
致电onHandleIntent()
这会将您的工作放在后台线程(由IntentService
提供)上,并使您的流程更有可能存活足够长时间来完成工作。
此外,你真的需要看看你正在做的工作。 9622帧约为160秒,或超过2.5分钟。这是非常长时间让您的应用忙于在后台执行某些操作,特别是如果您在大多数时间内没有阻止网络I / O或其他事情。