我尝试实施IntentService
BroadcastReceiver
,SCAN_RESULTS_AVAILABLE_ACTION
对IntentService
作出反应。
onReceive
应该在每次调用BroadcastReceiver
时比较列表。
即使我取消注册“服务已泄露IntentReceiver”
onDestroy()
中的public class MyClass extends IntentService {
private HashMap<String, List<String>>;
private WifiManager mWifiManager;
private WifiReceiver mWifiReceiver;
public MyClass() {
super("MyClass");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiReceiver = new WifiReceiver();
registerReceiver(mWifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
mWifiManager.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY,"ScanLock");
mWifiManager.setWifiEnabled(true);
return START_NOT_STICKY;
}
@Override
public void onDestroy(){
unregisterReceiver(mWifiReceiver);
mWifiManager.setWifiEnabled(false);
}
@Override
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
}
class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Here I do my stuff with the scan results
//should be called every 5 seconds
}
}
,也会出现错误。
以下是代码:
IntentService
代码中的问题在哪里?
为什么我一直收到此错误?
我仍然需要学习很多关于Android的知识,但我认为stopService()
是正确的方法,因为我不希望这个类产生任何结果。它应该在我发送电话IntentService
时停止。此IntentService
由另一个{{1}}调用!那是问题吗?
感谢您的帮助。
答案 0 :(得分:5)
我尝试使用对SCAN_RESULTS_AVAILABLE_ACTION作出反应的BroadcastReceiver实现IntentService。
这基本上没有意义。你的接收器最多可以注册几秒钟,希望如此。
我仍然需要学习很多关于Android的知识,但我认为IntentService是正确的方法,因为我不期望这个类有任何结果。
这没有任何意义。当您需要在后台线程中执行一些简短的工作时,可以使用IntentService
。例如,如果您使用AlarmManager
每15分钟检查一封新电子邮件,或者您有大型文件下载活动,则可以使用IntentService
。
当我发送一个调用stopService()时它应该停止。
您永远不会在stopService()
上致电IntentService
。 IntentService
返回onHandleIntent()
后自动停止。这就是为什么您的BroadcastReceiver
将在几秒钟内被移除的原因 - 您的onHandleIntent()
应该只运行几秒钟。
此IntentService由另一个IntentService调用!
这不太可能是一个好的设计。
答案 1 :(得分:4)
尝试在BroadcastReceiver
而不是OnCreate()
,
OnStartCommand()
那应该解决你的问题。