AndroidStudio 子執行緒通知主執行緒Demo
阿新 • • 發佈:2019-02-12
import android.os.Handler;
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;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tv = null;
Button btn = null;
MySelfHandler mHandler = null;
private MyThread thread =null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//設定文字框關聯
tv = (TextView)findViewById( R.id.textView );
tv.setText( "子執行緒通知主執行緒Demo" );
//設定按鈕關聯
btn = (Button)super.findViewById( R.id.button );
btn.setOnClickListener( new MyBtnOnClickListener());
//設定訊息迴圈
Looper looper = Looper.myLooper();
mHandler = new MySelfHandler(looper);
mHandler.removeMessages(0);
}
private class MyBtnOnClickListener implements View.OnClickListener {
public void onClick(View v) {
thread = new MyThread();
thread.start();
btn.setEnabled( false );
Log.e( "Message Button", "Btn Clicks" );
}
}//MyBtnOnClickListener
//訊息處理類 Handler **************************************
class MySelfHandler extends Handler {
public MySelfHandler(Looper looper){
super(looper);
}
public MySelfHandler(){
super();
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e( "Message Aread", "CurrentThread id:---->" + Thread.currentThread().getId() + Thread.currentThread().getName() + "<:" + msg.what + ":>" );
tv.setText("hello world!");
btn.setEnabled( true );
/*
switch(msg.what){
case 1:
tvMsg.setText((String)msg.obj);
break;
default:
Log.e(TAG,(String)msg.obj);
break;
}*/
}
}//MySelfHandler
//執行緒處理類 Thread **************************************
public class MyThread extends Thread {
@Override
public void run() {
int iCount = 0;
// while( true ){
try {
Thread.sleep(5000);//1秒
Looper looper = Looper.getMainLooper();
MySelfHandler mHandler = new MySelfHandler(looper);
mHandler.removeMessages(0);
iCount += 1;
//Message msg = new Message();
Message msg = mHandler.obtainMessage();
msg.what= iCount;
MySelfObj mObj = new MySelfObj();
mObj.strKey = "你好!";
msg.obj = mObj;
// msg.obj= String.valueOf( iCount );
// 將Message物件送入到main thread的MessageQueue裡面
mHandler.sendMessage(msg);
Log.e( "Thread Aread", "CurrentThread id:---->" + Thread.currentThread().getId() + Thread.currentThread().getName() + " Times:" + iCount );
} catch (InterruptedException e)
{
e.printStackTrace();
}
//System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
// }//while
}//run
}//MyThread
//自定義訊息傳遞資料 **************************************
public class MySelfObj{
public int a = 0;
public String strKey = "hello";
public int [] arr = { 0 , 1, 2, 3, 4};
}
}
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;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tv = null;
Button btn = null;
MySelfHandler mHandler = null;
private MyThread thread =null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//設定文字框關聯
tv = (TextView)findViewById( R.id.textView );
tv.setText( "子執行緒通知主執行緒Demo" );
//設定按鈕關聯
btn = (Button)super.findViewById( R.id.button );
btn.setOnClickListener( new MyBtnOnClickListener());
//設定訊息迴圈
Looper looper = Looper.myLooper();
mHandler = new MySelfHandler(looper);
mHandler.removeMessages(0);
}
private class MyBtnOnClickListener implements View.OnClickListener {
public void onClick(View v) {
thread = new MyThread();
thread.start();
btn.setEnabled( false );
Log.e( "Message Button", "Btn Clicks" );
}
}//MyBtnOnClickListener
//訊息處理類 Handler **************************************
class MySelfHandler extends Handler {
public MySelfHandler(Looper looper){
super(looper);
}
public MySelfHandler(){
super();
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e( "Message Aread", "CurrentThread id:---->" + Thread.currentThread().getId() + Thread.currentThread().getName() + "<:" + msg.what + ":>" );
tv.setText("hello world!");
btn.setEnabled( true );
/*
switch(msg.what){
case 1:
tvMsg.setText((String)msg.obj);
break;
default:
Log.e(TAG,(String)msg.obj);
break;
}*/
}
}//MySelfHandler
//執行緒處理類 Thread **************************************
public class MyThread extends Thread {
@Override
public void run() {
int iCount = 0;
// while( true ){
try {
Thread.sleep(5000);//1秒
Looper looper = Looper.getMainLooper();
MySelfHandler mHandler = new MySelfHandler(looper);
mHandler.removeMessages(0);
iCount += 1;
//Message msg = new Message();
Message msg = mHandler.obtainMessage();
msg.what= iCount;
MySelfObj mObj = new MySelfObj();
mObj.strKey = "你好!";
msg.obj = mObj;
// msg.obj= String.valueOf( iCount );
// 將Message物件送入到main thread的MessageQueue裡面
mHandler.sendMessage(msg);
Log.e( "Thread Aread", "CurrentThread id:---->" + Thread.currentThread().getId() + Thread.currentThread().getName() + " Times:" + iCount );
} catch (InterruptedException e)
{
e.printStackTrace();
}
//System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
// }//while
}//run
}//MyThread
//自定義訊息傳遞資料 **************************************
public class MySelfObj{
public int a = 0;
public String strKey = "hello";
public int [] arr = { 0 , 1, 2, 3, 4};
}
}