首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在每分钟后运行BroadcastReceiver?

如何在每分钟后运行BroadcastReceiver?
EN

Stack Overflow用户
提问于 2013-03-25 21:10:57
回答 6查看 8K关注 0票数 2

我正在开发一个应用程序,以便在每分钟后监控网络。为此,我使用了BroadcastReceiver。

我想在每分钟之后执行一次BroadcastReceiver。

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

在安卓系统中继续运行BroadcastReceiver可以吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-25 21:14:31

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

在广播接收器的onRecieve()方法中,使用类似于下面给出的代码:

代码语言:javascript
运行
复制
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);
票数 9
EN

Stack Overflow用户

发布于 2014-07-04 16:57:58

即使没有AlarmManager,你也可以做到

代码语言:javascript
运行
复制
    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
EN

Stack Overflow用户

发布于 2013-03-25 21:15:10

不是的。在Android或任何其他移动操作系统中持续运行任何会耗尽电池的操作都是绝对不可接受的,如果你有办法的话。

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

有关示例,请参阅this answer

有关更多信息,请参阅此帖子:Android: How to use AlarmManager

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15615817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档