Mel*_*Mel 13 android broadcastreceiver
我有一个我在服务中动态创建的BroadcastReceiver.其目的是检测何时发送SMS.它按预期工作.
我的麻烦是我收到一条错误,说"意图接收器已泄露".我错过了一个电话unregisterReceiver()吗?
我正在调用unregisterReceiver()在onDestroy().我想这一定是错的.我应该在哪里取消注册接收器?
码...
public class MyService extends Service {
BroadcastReceiver brSms;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public void onStart(Intent intent, int startid) {
//Define the receiver
brSms = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Do some stuff
};
}
registerReceiver(brSms, new IntentFilter(SENT_SMS_ACTION));
}
@Override
public void onDestroy() {
unregisterReceiver(brSms);
Toast.makeText(this, "onDestroy has been called", Toast.LENGTH_SHORT).show();
}
}//end of MyService
Run Code Online (Sandbox Code Playgroud)
试试这样:
public class MyService extends Service {
BroadcastReceiver brSms;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
brSms = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Do some stuff
}
};
registerReceiver(brSms, new IntentFilter(SENT_SMS_ACTION));
}
@Override
public void onStart(Intent intent, int startid) {
}
@Override
public void onDestroy() {
unregisterReceiver(brSms);
Toast.makeText(this, "onDestroy has been called", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道是什么原因导致了您的错误消息,但是为了回答您的问题,您正确地执行此操作以取消注册onDestroy().我从经验中知道这很好用,根据Service.onDestroy()的文档,它也是一个很好的地方:
...此服务应该清理它所拥有的任何资源(线程,注册接收器等)....
| 归档时间: |
|
| 查看次数: |
8329 次 |
| 最近记录: |