随便创建一个android项目,项目中使用Fragment,然后以下代码是简述Handler和Bundle的使用
Handler简单来说就是用来多线程开发然后使用方法回调的。可以用来更新UI界面,但是普通的Handler是和主线程用同一个线程的。
如果要另外开一个线程,需要使用:
HandlerThread handlerThread = new HandlerThread("handler_thread");
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
这种方式。
Bundle这个就不用多说,简单来说就是用来绑定数据的。然后用来传输的。
附上部分代码(界面的话,随便弄两个Button和一个ProgressBar,id就参考代码里面的):
public static class PlaceholderFragment extends Fragment implements View.OnClickListener{
private Button start,end;
private ProgressBar progressBar;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// super.handleMessage(msg);
progressBar.setProgress(msg.arg1);
handler.post(updateThread);
}
};
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i("juetion","Thread.id="+Thread.currentThread().getId());
View rootView = inflater.inflate(R.layout.fragment_layout, container, false);
start = (Button)rootView.findViewById(R.id.start);
end = (Button)rootView.findViewById(R.id.end);
progressBar = (ProgressBar)rootView.findViewById(R.id.progressBar);
start.setOnClickListener(this);
end.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.start:
Log.i("juetion","button_start Thread.id="+Thread.currentThread().getId());
// handler.post(updateThread);
HandlerThread handlerThread = new HandlerThread("handler_thread");
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putInt("age",20);
bundle.putString("name", "Jhon");
msg.setData(bundle);
msg.sendToTarget();
break;
case R.id.end:
Log.i("juetion","button_end");
handler.removeCallbacks(updateThread);
break;
}
}
Runnable updateThread = new Runnable() {
int i = 0;
@Override
public void run() {
Log.i("juetion", "Begin Thread.id="+Thread.currentThread().getId() );
i = i + 10;
Message msg = handler.obtainMessage();
msg.arg1 = i;
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e("juetion","i = " + i);
if(i > 100){
handler.removeCallbacks(updateThread);
Log.i("juetion","end Thread");
}else
handler.sendMessage(msg);
}
};
}
private static class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// super.handleMessage(msg);
Bundle bundle = msg.getData();
int age = bundle.getInt("age");
String name = bundle.getString("name");
Log.i("juetion","Handler Message");
Log.e("juetion","Handler Thread.id = "+Thread.currentThread().getId());
Log.i("juetion","age = " + age + ",name = " + name);
}
public MyHandler(Looper looper) {
super(looper);
}
public MyHandler() {
super();
}
}