阅读更多 转载请注明出处

   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秒,所以程序报超时。
效果图如下:


  • 大小: 24.9 KB
  • 查看图片附件

更多相关文章

  1. android 永远锁屏解决方法
  2. Android(安卓)Toast 使用总结
  3. 系出名门Android(7) - 控件(View)
  4. Android中的线程
  5. Android的消息机制,用Android线程间通信的Message机制,Android中Ha
  6. 浅谈Android中的线程的通信及Handle机制
  7. 理解Android进程创建流程(转)
  8. android 学习之---Android之SurfaceView学习(一)
  9. 浅析Android中的消息机制

随机推荐

  1. Android动态刷新listview中的数据
  2. TextView多行本文滚动轻松实现
  3. Android 实时曲线图/折线图
  4. Unable to resolve target 'android-16'
  5. Android内存监控
  6. Android Studio 项目模板修改
  7. Android 时间倒计时
  8. Android(安卓)SDK开发 -- TitleBar重构 (
  9. android shell打包
  10. android广播事件机制及应用(实现简单的定