80,471
社区成员




package com.test.handler;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class ChildSet extends Activity {
/** Called when the activity is first created. */
private ProgressBar myProgressbar;
private Button myButton;
private OnClickListener listener;
private Runnable childThread;
private static final String TAG = "TAG";
Myhandler mainHandler, childHandler;
private int i = 0;
// private Thread t;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myProgressbar = (ProgressBar) findViewById(R.id.progressbar_id);
myButton = (Button) findViewById(R.id.button_id);
Log.i(TAG, "Main Thread:" + Thread.currentThread().getName());
// HandlerThread handlerThread = new HandlerThread("child_ron_Thread");
// handlerThread.start();
mainHandler = new Myhandler(Looper.getMainLooper());
// childHandler = new Myhandler(handlerThread.getLooper());// $$$$$$$$$$$$$
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (i == 0) {
myProgressbar.setVisibility(ProgressBar.VISIBLE);
mainHandler.post(childThread);
i = i + 1;
}
// myProgressbar.setProgress(80);//这个可以设置的哟~~~
Log.i(TAG, "Click..." + Thread.currentThread().getName());
}
});
childThread = new Runnable() {
int persent = 0;
@Override
public void run() {
// TODO Auto-generated method stub
persent += 5;
Message msg = Message.obtain();
msg.arg1 = persent;
Log.i(TAG, "Runnable Thread:"
+ Thread.currentThread().getName());
// mainHandler.sendMessage(msg);
mainHandler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
};
}
// //////////////////////////onCreate////////////////////////////
class Myhandler extends Handler {
public Myhandler(Looper looper) {
super(looper);
}
public void handleMessage(Message msg) {
myProgressbar.setProgress(msg.arg1);
Log.i(TAG, "handleMessage Thread:"
+ Thread.currentThread().getName());
mainHandler.post(childThread);
// 在子线程中处理,主线程中对button的响应很快;如果这边改成主线程处理则对主线程按钮的响应就慢了
if (msg.arg1 >= 100) {
mainHandler.removeCallbacks(childThread);
}
}
}
}
package com.test.handler;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class MultiThreadHandler extends Activity {
private ProgressBar myProgressBar;
private Button myButton;
HandlerThread barThread = new HandlerThread("ChildThread");
myHandler barHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myProgressBar = (ProgressBar) findViewById(R.id.progressbar_id);
myButton = (Button) findViewById(R.id.button_id);
// HandlerThread barThread = new HandlerThread("myThread");
barThread.start();
barHandler = new myHandler(barThread.getLooper());
// myHandler barHandler = new myHandler(barThread.getLooper());
myProgressBar.setProgress(10);
Log.i("TAG", "onCreate ---> " + Thread.currentThread().getName());
Message msg = barHandler.obtainMessage();
msg.arg1 = 0;
msg.sendToTarget();
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myProgressBar.setProgress(70);
Log.i("TAG", "Click the Button...");
Message msg = barHandler.obtainMessage();
msg.arg1 = 80;
msg.sendToTarget();
barHandler.post(barThread);
// myProgressBar.setProgress(60);
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
barHandler.removeCallbacks(barThread);
barThread.stop();
}
class myHandler extends Handler {
public myHandler() {
}
public myHandler(Looper myLooper) {
super(myLooper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
int ms = msg.arg1;
Log.i("TAG", "handlerMessage ---> "
+ Thread.currentThread().getName());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myProgressBar.setProgress(50);// //////////////////////////////////////
Log.i("TAG", "The message here is " + ms);
Message msg1 = barHandler.obtainMessage();
if (msg1.arg1 < 100) {
msg1.arg1 = msg1.arg1 + 10;
msg1.sendToTarget();
// barHandler.post(barThread);
}
}
}
}
Looper.getMainLooper()
HandlerThread hThread = new HandlerThread("test");
hThread.start();
mainHandler = new Myhandler(hThread.getLooper());
package com.test.handler;
import com.test.handler.MultiThreadHandler.Myhandler;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
public class Final extends Activity {
private Button myButton;
private ProgressBar myProgressBar;
MyHandler mainHandler, childHandler;
MyHandlerThread myHandlerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button) findViewById(R.id.button_id);
myProgressBar = (ProgressBar) findViewById(R.id.progressbar_id);
myHandlerThread = new MyHandlerThread("Children_Thread");
myHandlerThread.start();
mainHandler = new MyHandler(getMainLooper());
childHandler = new MyHandler(myHandlerThread.getLooper());
Log.i("TAG","Thread---" + Thread.currentThread().getName() + " onCreate");
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("TAG","Thread---" + Thread.currentThread().getName() + " Click~~~~~~~~~~");
childHandler.post(myHandlerThread);//用子线程的Handler来post,依旧在子线程中运行run方法?????
}
});
}
class MyHandlerThread extends HandlerThread {
int i = 0;
public MyHandlerThread(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
i = i + 10;
if(i < 100) {
Log.i("TAG","Thread---" + Thread.currentThread().getName() + " i ---> " + i);
Message msg = mainHandler.obtainMessage();
msg.arg1 = i;
mainHandler.sendMessage(msg); //send到main线程的消息队列中,然后在main的handleMessage里用这个值设置进度条
}
if(i > 100) {
Log.i("TAG","Thread---" + Thread.currentThread().getName() + " removeCallbacks.......");
mainHandler.removeCallbacks(null);
}
}
}
class MyHandler extends Handler {
public MyHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
myProgressBar.setProgress(msg.arg1);
Log.i("TAG","Thread---" + Thread.currentThread().getName() + " The msg here ---> " + msg.arg1);
childHandler.post(myHandlerThread);
}
}
}