2014-09-12 104 views
0

我是Android新手。 我做了服务和线程的应用程序,显示敬酒每5秒:android:延迟线程

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Handler; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class MyService extends Service { 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
    Handler mHandler = new Handler(); 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     final Runnable RunnableUpdateResults = new Runnable() { 
      public void run() { 
       Toast.makeText(getBaseContext(), "Hello", Toast.LENGTH_SHORT).show(); 
      } 
     }; 
     new Thread() { 
      public void run() { 
       try {     
         mHandler.postDelayed(RunnableUpdateResults); 
         sleep(5000); 
       } catch (InterruptedException e) {e.printStackTrace();} 
      } 
     }.start(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     return START_STICKY; 
    } 

    public void onStart(final Context context,Intent intent, int startId) 
    { 
    } 
} 

,但只显示一次我的吐司。没有崩溃。 我为此使用了Handler的postDelayed函数。它将在主UI线程上以指定的延迟运行你的代码,所以你将能够更新UI控件,但它不适用。

任何解决方案重复执行任务?

回答

1

电话Thread.sleep内while循环:

boolean isThreadRunning=true; 
new Thread() { 
      public void run() { 
       try {  
         while(isThreadRunning){    
         mHandler.postDelayed(RunnableUpdateResults); 
         sleep(5000); 
         } 
       } catch (InterruptedException e) {e.printStackTrace();} 
      } 
     }.start(); 

要停止线程使isThreadRunning=false;

您可以使用相同的实现handler.postDelayed

RunnableUpdateResults呼叫mHandler.postDelayed:

final Runnable RunnableUpdateResults = new Runnable() { 
      public void run() { 
       mHandler.postDelayed(RunnableUpdateResults,5000); 
       Toast.makeText(getBaseContext(), 
         "Hello", Toast.LENGTH_SHORT).show(); 
      } 
     }; 

要停止处理程序呼叫removeCallbacks方法:

mHandler.removeCallbacks(RunnableUpdateResults); 
0

使用TimerTimerTask

new Timer().schedule(new TimerTask() { 
     @Override 
     public void run() { 
      mHandler.post(RunnableUpdateResults);     
     } 
    }, 0, 5000);