我正在开发一个应用程序来监控每分钟后的网络。我正在使用BroadcastReceiver。
我想在每分钟后执行BroadcastReceiver。
我该怎么办?我可以在BroadcastReceiver中使用Thread.sleep()吗?
可以继续在android中继续运行BroadcastReceiver吗?
答案 0 :(得分:7)
BroadcastReceievers设计为仅在接收到某些广播(系统广播或用户定义的广播)时运行。如果您希望每分钟运行一些代码,您可以使用Alarm Manager创建服务并为每分钟运行计划一次。您可以使用警报管理器从广播接收器启动服务,它将每分钟运行一次。
在广播接收器的onRecieve()方法中,使用类似于下面给出的代码:
PendingIntent service = null;
Intent intentForService = new Intent(context.getApplicationContext(), YourService.class);
final AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
final Calendar time = Calendar.getInstance();
time.set(Calendar.MINUTE, 0);
time.set(Calendar.SECOND, 0);
time.set(Calendar.MILLISECOND, 0);
if (service == null) {
service = PendingIntent.getService(context, 0,
intentForService, PendingIntent.FLAG_CANCEL_CURRENT);
}
alarmManager.setRepeating(AlarmManager.RTC, time.getTime()
.getTime(), 60000, service);
答案 1 :(得分:2)
即使没有AlarmManager,您也可以这样做
private void ping() {
try {
//Your code here
} catch (Exception e) {
e.printStackTrace();
}
scheduleNext();
}
private void scheduleNext() {
mHandler.postDelayed(new Runnable() {
public void run() { ping(); }
}, 60000);
}
public int onStartCommand(Intent intent, int x, int y) {
mHandler = new android.os.Handler();
ping();
return START_STICKY;
}
答案 2 :(得分:1)
没有。如果你能提供帮助,那么连续运行任何会耗尽Android或任何其他移动操作系统电池的东西是完全不可接受的。
你应该做的是使用AlarmManager类并每隔一分钟触发一次Intent,然后激活一个Service,你可以在其中运行你想要的任何代码。
有关示例,请参阅this answer。
有关详细信息,请参阅此主题: Android: How to use AlarmManager
答案 3 :(得分:1)
是否有理由需要BroadcastReceiver?如果是这样,答案非常简单,就是让某个组件每分钟广播它收到的Intent。
我认为你应该看一下Alarm Manager。您可以对其进行编程,以定期在您的应用中触发PendingIntent。我敢打赌那就是你想要的。
答案 4 :(得分:0)
我建议您使用Service组件,而不是使用BroadcastReceiver。您的代码可能需要超过10秒才能执行,但是对于BroadcastReceiver,您执行代码的时间限制为10秒。
此外,服务最适合后台处理,如下载,上传或播放音乐。
所以我建议您使用执行服务而不是BroadcastReceiver。
答案 5 :(得分:0)