广播接收器不断重新启动



我正在制作一个小部件,我想每秒更新一次(它就像一个倒计时/定时器小部件),所以我使用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(这在小部件提供程序类中):

@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);
}

任何帮助都将不胜感激,谢谢你,所以!

正如你所看到的,这个过程不断地结束,然后重新开始,这种情况发生在手机清醒和睡着的时候。

就死亡和重启的过程而言,这并不完全令人惊讶。一旦您的onReceive()方法返回,欢迎Android随时终止您的进程。

就"既醒着又睡着"而言,还有其他东西让设备保持清醒。根据定义,如果设备处于休眠状态,则CPU不执行指令,因此没有日志记录语句。您可以使用adb shell dumpsys power查看谁持有WakeLock

最新更新