Activity退出后,BroadcastReceiver就报错
如下图BroadcastReceiver是在service中启动的,用进程查杀把Activity杀了,但是service还在。此时,执行到RemindReceiver 时,就会报错。
求解释
package sdnote.note;--------------------编程问答-------------------- 判断一下是否有null的返回值 --------------------编程问答-------------------- Activity杀死时,有没有取消receive注册 --------------------编程问答-------------------- BroadcastReceiver 注册分两种,
import sdnote.note.vo.Matter;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Vibrator;
public class RemindReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
int index = intent.getExtras().getInt("index");
Matter m = NoteModel.getInstance().matters.get(index);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon, m.title != null ? m.title : m.content, System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, SDNoteActivity.class), 0);
notification.setLatestEventInfo(context, m.title, m.content, contentIntent);
manager.notify(R.drawable.icon, notification);
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(new long[] { 50, 2000, 50, 2000 }, -1);
}
}
第一种是静态注册,也就是在manifest.xml文件中注册,
另外一种是在程序中注册,如果你是在程序中动态注册的话,activity结束时,一定要反注册(unregister),要不然,程序会出现问题。我怀疑你用的是动态注册,而且没有反注册。 --------------------编程问答--------------------
我晚上写个完整的DEMO好了 --------------------编程问答-------------------- --------------------编程问答-------------------- Service还在,是不是被杀掉又起来了,在onDestroy里log一下看看吧 --------------------编程问答--------------------
借LZ的帖子,看了3楼的回复,我也有个疑问:在activity中动态注册的广播,在退出activity的时候必须要注销广播才行吗?那如果我要实现一个接受系统广播的BroadcastReceiver,可我又不想静态注册(静态注册在程序一安装的时候就注册了吧,而且要卸载程序才能注销),我想在程序中动态注册,这个程序就相当于我自己随时能设置BroadcastReceiver一样,当然这个设置要能够保存。我肯定希望退出程序也不注销BroadcastReceiver,在我不希望接收这个系统广播的时候我再启动程序来注销它,要这样的话,怎么实现呢? --------------------编程问答--------------------
希望的情况是“activity杀了,service还在,能触发BroadcastReceiver,并且发出Notification”
现在的情况是“activity杀了,service还在,也能触发BroadcastReceiver,但是无法发出Notification” --------------------编程问答-------------------- 自己重新写吧。。。。
补充:移动开发 , Android