我正在创建一个我想每秒更新的小部件(它就像一个倒计时/计时器小部件),所以我使用AlarmManager和广播接收器来实现这一点,而无需唤醒手机并耗尽所有电池,但是在运行窗口小部件时,我在LogCat中不断出现错误:
08-18 18:40:43.368 390-1988/system_process I/ActivityManager: Process com.dysign.livetubecountdown (pid 9784) has died.
08-18 18:40:44.282 390-414/system_process I/ActivityManager: Start proc com.dysign.livetubecountdown for broadcast com.dysign.livetubecountdown/.WidgetAlarmManager: pid=9809 uid=10144 gids={50144, 3003, 1028}
08-18 18:40:44.306 9809-9809/com.dysign.livetubecountdown E/Trace: error opening trace file: No such file or directory (2)
正如您所看到的,该过程一直处于死亡状态,然后重新启动,这是在手机处于清醒和睡眠状态时发生的。
以下是我启动AlarmManager的方法(这是在widget提供程序类中):
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, WidgetAlarmManager.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + 1000, 1000 , pi);
}
这是广播接收器代码:
@Override
public void onReceive(Context context, Intent intent) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_main);
DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM, Locale.getDefault());
remoteViews.setTextViewText(R.id.widgetTextView, "TIME = " + format.format(new Date()));
ComponentName thisWidget = new ComponentName(context, Widget.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, remoteViews);
}
非常感谢任何帮助,谢谢,SO!
答案 0 :(得分:1)
正如您所看到的,该过程一直处于死亡状态,然后重新启动,这是在手机处于清醒和睡眠状态时发生的。
就流程死亡和重启而言,这并不奇怪。一旦您的onReceive()
方法返回,欢迎Android随时终止您的流程。
就“清醒和睡着”而言,其他一些东西让设备保持清醒。根据定义,如果设备处于休眠状态,则CPU不执行指令,因此没有记录语句。您可以使用 adb shell dumpsys power
查看谁持有WakeLock
。