待定意图和警报管理器

时间:2017-04-08 12:19:48

标签: android android-intent alarmmanager android-pendingintent

我最近一直在制作Android应用程序.. 在其中我使用了Pending Intent和Alarm Manager。 我需要有多个挂起的意图,所以我使用的是FLAG_ONE_SHOT。报警管理器将以上述间隔发送广播。而且,与此同时,我使用intent的setAction()方法并将currentTimeMillis()作为Argument传递。我有相应的广播接收器。问题是,一旦应用程序关闭或从最近的托盘中删除,广播接收器就不会运行。 代码如下: setAlarm: private void setupAlarm(int seconds){ AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE); Intent intent = new Intent(getBaseContext(),OnAlarmReceive.class); // PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); intent.setAction(Long.toString(System.currentTimeMillis的())); intent.putExtra(" id",ID); PendingIntent pendingIntent = PendingIntent.getBroadcast(ChatActivity.this,0,intent,PendingIntent.FLAG_ONE_SHOT); Log.e(TAG,"设置警报"); 日历日历= Calendar.getInstance(); calendar.add(Calendar.SECOND,秒); alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);} 广播接收器 public void onReceive(Context context,Intent intent){ String id = intent.getStringExtra(" id"); Log.e(TAG,"即将删除id为" + id的消息); SQLiteDatabase database = context.openOrCreateDatabase(" /sdcard/userlists.db" ;, SQLiteDatabase.CREATE_IF_NECESSARY,null); database.execSQL(" DELETE FROM" +" MESSAGE" +" WHERE" +" id" +" =&# 39;" + id +"'"); broadcaster = LocalBroadcastManager.getInstance(context); intent = new Intent(COPA_RESULT); broadcaster.sendBroadcast(意向);} 的Manifest.xml < receiver android:name =" .OnAlarmReceive"机器人:启用="真"机器人:导出="真" /> 请帮我。即使应用程序关闭,我也需要Broadcaster来完成这项工作。

1 个答案:

答案 0 :(得分:0)

进程生命周期错误,当应用程序进入后台以回收内存时,系统可能会终止进程

您需要为接收工作安排JobService,无论申请是否有效

来自流程和应用程序生命周期的官方document

  

进程生命周期错误的一个常见示例是BroadcastReceiver   在它收到Intent时启动一个线程   BroadcastReceiver.onReceive()方法,然后从中返回   功能。一旦它返回,系统就会考虑BroadcastReceiver   不再活跃,因此不再需要其托管过程   (除非其他应用程序组件处于活动状态)。所以,系统   可以在任何时候杀死进程以回收内存,并且这样做,   它终止在进程中运行的衍生线程。解决方案   解决这个问题通常是从中调度JobService   BroadcastReceiver,因此系统知道仍有活动的工作   在这个过程中完成。

您可以按照以下example来完成您的要求