1, Handler 加 Thread 的 sleep 方法
public class MainActivity extends Activity {
private Button mButton;
private MyThread myThread = new MyThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.main_view_button);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myThread.cancel();
}
});
new Thread(myThread).start();
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (myThread.isCancel())
return;
super.handleMessage(msg);
}
};
public class MyThread implements Runnable {
private boolean bCancel = false;
@Override
public void run() {
while (true) {
try {
if (! isCancel()) {
// 线程暂停10s
Thread.sleep(10 * 1000);
Message message = Message.obtain();
message.what = 0x001;
handler.sendMessage(message);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public boolean isCancel() {
return bCancel;
}
public void cancel() {
this.bCancel = true;
}
}
}
2, Handler的postDelayed(Runnable, long)方法
public class MainActivity extends Activity {
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler.postDelayed(runnable, 10 * 1000);
}
Runnable runnable = new Runnable() {
@Override
public void run() {
Log.v(TAG, "do some thing");
handler.postDelayed(this , 10 * 1000);
}
};
}
停止计时器
handler.removeCallbacks(runnable);
3. Handler + Timer + TimerTask
public class MainActivity extends Activity {
private final Timer timer = new Timer();
private TimerTask task = new TimerTask() {
@Override
public void run() {
Message message = Message.obtain();
message.what = 0x001;
handler.sendMessage(message);
}
};
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.v(TAG,"handleMessage");
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
timer.schedule(task, 10000, 10000);
}
}
取消的方法:
timer.cancel()