2

我正在开发一个应用程序来监控每分钟后的网络。我为此使用广播接收器。

我想每分钟执行一次 BroadcastReceiver 。

我该怎么做?我可以在 BroadcastReceiver 中使用 Thread.sleep() 吗?

在android中持续运行BroadcastReceiver可以吗?

4

6 回答 6

9

BroadcastReceivers 设计为仅在接收到某些广播(系统广播或用户定义的广播)时运行。如果您想每分钟运行一些代码,您可以创建一个服务并使用警报管理器将其安排为每分钟运行一次。您可以使用警报管理器从广播接收器启动服务,它将每分钟运行一次。

在广播接收器的 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);
于 2013-03-25T13:14:30.510 回答
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;
    }
于 2014-07-04T08:57:58.293 回答
1

不可以。如果你能提供帮助,在 Android 或任何其他移动操作系统中持续运行任何会耗尽电池电量的东西是绝对不能接受的。

您应该做的是使用AlarmManager类并每隔一分钟左右触发一个 Intent,这反过来将激活一个Service,您可以在其中运行您想要的任何代码。

有关示例,请参见此答案。

有关更多信息,请参阅此线程: Android:如何使用 AlarmManager

于 2013-03-25T13:15:09.850 回答
1

是否有理由需要广播接收器,特别是?如果是这样,答案很简单,就是让某个组件每分钟广播它收到的 Intent。

我认为你应该看看警报管理器。您可以对其进行编程以定期在您的应用程序中触发 PendingIntent。我敢打赌这就是你想要的。

于 2013-03-25T13:15:25.070 回答
0

而不是广播接收器。您应该使用AlarmManager以在特定时间间隔启动服务

你可以从这里获取示例源代码

希望它会有所帮助。

于 2013-03-25T13:17:33.943 回答
0

我建议您使用 Service 组件,而不是使用 BroadcastReceiver。您的代码可能需要超过 10 秒才能执行,但是对于 BroadcastReceiver,您有 10 秒的限制来执行代码。

此外,服务最适合下载、上传或播放音乐等后台进程。

所以我建议你使用执行服务而不是广播接收器。

于 2013-03-25T13:14:16.133 回答