我正在开发一个应用程序,以便在每分钟后监控网络。为此,我使用了BroadcastReceiver。
我想在每分钟之后执行一次BroadcastReceiver。
我该怎么做呢?我可以在BroadcastReceiver中使用Thread.sleep()吗?
在安卓系统中继续运行BroadcastReceiver可以吗?
发布于 2013-03-25 21:14:31
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);发布于 2014-07-04 16:57:58
即使没有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;
}发布于 2013-03-25 21:15:10
不是的。在Android或任何其他移动操作系统中持续运行任何会耗尽电池的操作都是绝对不可接受的,如果你有办法的话。
您应该做的是使用AlarmManager类,每隔一分钟左右触发一次意图,这反过来将激活一个Service,您可以在其中运行任何您想要的代码。
有关示例,请参阅this answer。
有关更多信息,请参阅此帖子:Android: How to use AlarmManager
https://stackoverflow.com/questions/15615817
复制相似问题