我正在运行alarmManager,我需要从3个不同的SQLite数据库中获取数据,并根据情况显示通知。通知可能一次超过5个。我得到了错误:跳过9622帧!应用程序可能在其主线程上做了太多的工作。应用程序也将停止。有没有任何方法可以运行alarmManager以线程或异步方式显示通知,这样我就不会损害应用程序的性能。
您应该是:
-
在
PendingIntent
上使用getBroadcast()
,创建PendingIntent
以传递给AlarmManager
上的方法 -
让广播
Intent
指向WakefulBroadcastReceiver
的子类 -
让接收者呼叫
startWakefulService()
,Intent
指向你进行工作的IntentService
-
让
IntentService
在onHandleIntent()
结束时调用completeWakefulIntent()
这将把您的工作放在后台线程(由IntentService
提供)上,并使您的进程更有可能存活足够长的时间来完成工作。
除此之外,你真的需要看看你正在做的工作。9622帧约为160秒,或超过2.5分钟。对于你的应用程序来说,这是一段非常长的时间忙于在后台做一些事情,特别是如果你在大部分时间里没有阻止网络I/O或其他事情。