package com.example.joshua.wangyiyun; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; Button btn; private int mMessageCount = 0; private int ButtonCount = 0; Thread myThread; private MyThread myThread2; ; private Handler mHandler; private Handler mHandler3; private HandlerThread myThread3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn= (Button) findViewById(R.id.btn); // myThread = new Thread(new MyRunnable(), "MessageTestThread"); // myThread.start(); // myThread2 = new MyThread(); // myThread2.start(); // mHandler = new Handler(myThread2.getLooper(), new Handler.Callback() { // @Override // public boolean handleMessage(Message msg) { // Log.d(TAG, "get Message "+ mMessageCount); // mMessageCount++; // try { // Thread.sleep(10000); // } catch (InterruptedException e) { // e.printStackTrace(); // } // return false; // } // }); myThread3 = new HandlerThread("MessageTestThread3"); myThread3.start(); mHandler3 = new Handler(myThread3.getLooper()); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ButtonCount++; Message msg = new Message(); // mHandler.sendMessage(msg); mHandler3.post(new Runnable() { @Override public void run() { Log.d(TAG, "get Message for Thread3 "+ mMessageCount); mMessageCount++; } }); } }); } Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); btn.setText(msg.arg1+""); } }; class MyRunnable implements Runnable { @Override public void run() { int count = 0; for (; ; ) { Log.d(TAG, "MyThread " + count); count++; Message message=handler.obtainMessage(); message.arg1=count; handler.sendMessage(message); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class MyThread extends Thread { private Looper mLooper; @Override public void run() { super.run(); Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } Looper.loop(); } public Looper getLooper() { if (!isAlive()) { return null; } // If the thread has been started, wait until the looper has been created. synchronized (this) { while (isAlive() && mLooper == null) { try { wait(); } catch (InterruptedException e) { } } } return mLooper; } } }
线程的复杂使用
最新推荐文章于 2024-05-15 16:52:20 发布