转载请注明出处

android的线程和java的线程是有些不同的,这个超时的例子我也试了一天了。android的线程实在是蛋疼。

直接上代码:
import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * @author Tony Shen * */public class Main extends Activity {private Button button;private Timer timer;private final int TIMER_EXECUTE = 1;private final int ERROR_MESSAGE = 1;private final int CHECK_TIME = 5000;private EThread eThread;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                button = (Button) findViewById(R.id.btn);        button.setOnClickListener(new OnClickListener() {public void onClick(View v) {        //timer for check the threadtimer = new Timer();          timer.schedule(new TimerTask(){                @Override            public void run() {                  checkThread();            }                      },CHECK_TIME);                eThread = new EThread();        eThread.start();}        });    }    @Overrideprotected Dialog onCreateDialog(int id) {return new AlertDialog.Builder(this).setTitle("错误").setMessage("线程超时!").create();}private Handler mHandler = new Handler() {        public void handleMessage(Message msg) {              switch(msg.what){                              case TIMER_EXECUTE:            if (eThread.getState().toString().equals("TERMINATED")||            eThread.getState().toString().equals("TIMED_WAITING")) {                eThread.stopThread(true);            showDialog(ERROR_MESSAGE);            timer.cancel();// 关闭计时器            }            break;            }            super.handleMessage(msg);        }    };        protected void checkThread() {    Message msg = new Message();    msg.what = TIMER_EXECUTE;              mHandler.sendMessage(msg);}        class EThread extends Thread {    private boolean flag = true;        public void stopThread(boolean flag) {            this.flag = !flag;        }    @Overridepublic void run() {Looper.prepare();try {Thread.sleep(6000);} catch (InterruptedException e) {e.printStackTrace();}        timer.cancel();// 关闭计时器if(!flag) {return;}        Intent i = new Intent(Main.this,SecondActivity.class);        startActivity(i);}    }}


这个例子模拟了线程超时的情况,通过timer来检查,如果5秒eThread线程还没运行完那就报一个超时的信息,如果低于5秒则跳转到下一个Activity。

在程序的97行,我让主线程睡了6秒,所以程序报超时。
效果图如下:

Android 线程超时的例子

更多相关文章

  1. Android AIDL例子
  2. android 安装文件例子
  3. android生命周期的例子
  4. 初学Android时,运行SDK的例子出现警告
  5. android Sqlite多线程访问异常解决方案
  6. android UI跨线程操作
  7. 在Android中实现多线程同步
  8. Android/java 多线程(五)-ThreadPoolExecutor线程池的使用

随机推荐

  1. 跨平台移动开发_Android(安卓)平台使用 P
  2. 利用Termux搭建自己的Android移动工作站,
  3. Android复习笔记--Intent
  4. Android 渗透测试学习手册 第五章 Androi
  5. Android交互对话框
  6. 【Android】Android快速入门教程(二)——An
  7. Android 淺探(二):系統架構
  8. 重识Activity——生命周期详解
  9. Android2高级编程读书笔记——第一章(1)
  10. android中使用PrinterShare实现蓝牙打印