在每X秒服务的Andr​​oid运行线程 [英] Android run thread in service every X seconds

查看:118
本文介绍了在每X秒服务的Andr​​oid运行线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在每X秒的Andr​​oid服务创建一个线程

I want to create a thread in an Android service that runs every X seconds

我目前正在使用,但postdelayed方法似乎真的落后了我的应用程序。

I am currently using , but the postdelayed method seems to really lag out my app.

    @Override
public int onStartCommand(Intent intent, int flags, int startId){

    super.onStartCommand(intent, flags, startId);

    startRepeatingTask();

    return startId;

}

private final static int INTERVAL = 20000; //20 milliseconds
Handler m_handler = new Handler();

Runnable m_handlerTask = new Runnable()
{
     @Override 
     public void run() {
         // this is bad
          m_handler.postDelayed(m_handlerTask, INTERVAL);



     }
};

void startRepeatingTask()
{
    m_handlerTask.run(); 
}

void stopRepeatingTask()
{
   m_handler.removeCallbacks(m_handlerTask);
   stopSelf();
}

我希望做一个新的线程是这样的:

I want to do a new thread like this:

   public void threadRun()
{
    Thread triggerService = new Thread(new Runnable(){
        public void run(){
            Looper.prepare();
            try{
                    //do stuff here?

            }catch(Exception ex){
                    System.out.println("Exception in triggerService Thread -- "+ex);
            }//end catch


        }//end run
  }, "aThread");
  triggerService.start();


  //perhaps do stuff here with a timer?
  timer1=new Timer();

  timer1.scheduleAtFixedRate(new methodTODOSTUFF(), 0, INTERVAL);
  }

我不知道做一个后台线程在一定的时间间隔运行的最佳方式,深入了解AP preciated!

I'm not sure the best way to do a background thread to run at a certain interval, insight appreciated!

推荐答案

有替代方法可以做到这个数字。就个人而言,我preFER使用<一个href="http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html">ScheduledExecutorService:

There are number of alternative ways to do this. Personally, I prefer to use ScheduledExecutorService:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);

// This schedule a runnable task every 2 minutes
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
  public void run() {
    doSomethingUseful();
  }
}, 0, 2, TimeUnit.MINUTES);

这篇关于在每X秒服务的Andr​​oid运行线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆