从android远程服务每30分钟运行一次方法

时间:2015-11-04 16:24:29

标签: android multithreading scheduled-tasks android-handler aidl

我有一个在远程进程上运行的服务(通过AIDL接口)。这是一项不可阻挡的服务(从启动完成开始,直到卸载应用程序为止)。此服务继续监听UDP套接字。我想每30分钟在这个服务中运行一个函数(负责通过udp socket向服务器发送ping消息)。

我试图启动线程并睡眠30分钟,但它没有工作

var MyComponent = React.createClass({
  getInitialState() {
    return { /* initial state */ };
  },
});

此函数在任意时间内调用。不完全是在30分钟内。

还尝试了计时器任务,处理程序和ScheduledExecutorService,也没有运气

new Thread(new Runnable() {
    public void run() {
        while (true) {
            try {
                sendPingMessage();
                Thread.currentThread().sleep(1000 * 60 * 30);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}).start();

似乎问题在于Android深度睡眠模式[http://binarybuffer.com/2012/07/executing-scheduled-periodic-tasks-in-android][1]

我也试过使用AlarmManger。但我不能在单独的班级中使用广播接收器作为报警管理器。因为我想从android远程服务发送ping消息(我无法连接/绑定到广播接收器内的远程服务)

什么是克服我的问题的最佳方法?我可以在服务类内部使用报警管理器广播接收器(使用单独的广播接收器类)吗?

1 个答案:

答案 0 :(得分:0)

我使用AlarmManager进行更新功能。也许这也适合你。

void updatecheck(Context context){

    Intent alarmIntent = new Intent(context, yourclass.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), 30 * 60 * 1000, pendingIntent);
}