private volatile boolean mStopped = false;    private int i;    TextView tv1;    TextView tv2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main3);        tv1 = (TextView) findViewById(R.id.tv1);        tv2 = (TextView) findViewById(R.id.tv2);        Button button4 = (Button) findViewById(R.id.button4);    //获取“开始”按钮        Button button5 = (Button) findViewById(R.id.button5);    //获取“停止”按钮        //开始按钮        button4.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if( mStopped = true) {                    mStopped = false;                    Log.i("主线程ID", String.valueOf(Thread.currentThread().getId()));                    Log.i("主线程var", String.valueOf(Thread.currentThread().getName()));                    fgetsum(String.valueOf("mytv1"), 1);                    fgetsum(String.valueOf("mytv2"), 2);                }            }        });        //结束线程按钮        button5.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                    mStopped = true;            }        });    }    //定义Handler 消息处理类,Handler 允许发送和处理 Message 或 Rannable 对像到其所在线程的 MessageQueue中    //Handler接收Message通知,并刷新tv1    //一般在这里刷新UI    final Handler handler2 = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what){                case 0x101:                    tv1.setText(String.valueOf(msg.obj.toString()));                    break;                case 0x102:                    tv2.setText(String.valueOf(msg.obj.toString()));                    break;                default:                    tv1.setText(String.valueOf("未知msg.what"));                    break;            }        }    };    //定义Runnable接口    //在子线程中发送Message给Handler    //Runnable不会在UI运行,所以在这里不能直接修改UI对象属性    private void fgetsum(final String strname, final int tvid) {        Thread thread = new Thread() {            @Override            public void run() {                while (mStopped == false) {                    i++;                    try {                        Thread.sleep(1000);                        Log.i("子线程ID" + strname, String.valueOf(Thread.currentThread().getId()));                        Log.i("子线程名" + strname, String.valueOf(Thread.currentThread().getName()));                        Message message = handler2.obtainMessage();                        message.arg1 = tvid;                       //如果tvid=1传入时间,否则传入i                        if(tvid==1){                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss", Locale.getDefault());                            message.what=0x101;                            message.obj = String.valueOf(sdf.format(new Date()));                        }else{                            message.what=0x102;                            message.obj =i;                        }                        handler2.sendMessage(message);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }        }        };        thread.start();        thread = null;    }

Android 跟winform一样,,主线程上不能直接更新UI上的控件,否则界面会假死(比如进度条、下载等任务)

在ASP.NET下有BackgroundWorker,而Android一般用Handler+Thread+Message来实现,对于用惯了.net的人说,看JAVA程序会很不习惯,很多功能实现起来比.NET麻烦多了。。。。。

另外查了一下JAVA资料,如果要创建N个线程,建议用线程序池(ExecutorService)更好.

更多相关文章

  1. Android(安卓)5.0新控件 FloatingActionButton | 悬浮按钮 介绍
  2. android字体闪烁动画(线程)
  3. android如何拿高薪
  4. Android中如何使用对话框(单选对话框和多选对话框)
  5. Android实现“退出确认”对话框
  6. Android中RadioGroup RadioButton CheckBox多选按钮实现方法以及
  7. 防止Android点击按钮过快造成多次事件实现原理
  8. android控制PC
  9. RxJava在Android的应用场景

随机推荐

  1. JDBC连接MySQL5.7的方法
  2. MySQL 8 新特性之Invisible Indexes
  3. mysql5.7.20免安装版配置方法图文教程
  4. 在linux命令下导出导入.sql文件的方法
  5. MySQL导入csv、excel或者sql文件的小技巧
  6. Java将excel中的数据导入到mysql中
  7. mysql8.0.11 winx64手动安装配置教程
  8. windows10+mysql8.0.11zip安装教程详解
  9. Ubuntu Server 16.04下mysql8.0安装配置
  10. mysql8.0.2离线安装配置方法图文教程