安卓 多线程

方法1:创建单独的线程

new Thread(new Runnable() {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		Doingwork();
	}
}).start();

方法2:利用线程池:

    private ExecutorService executorService = Executors.newFixedThreadPool(4);
上面是创建一个固定大小的线程池,这里面的线程不会被关闭,一旦有任务则会分配给线程,但是如果线程都在执行,则排队等候

    private ExecutorService executorService = Executors.newCachedThreadPool();
这样则是创建一个缓存的线程池,线程被创建之后不会立即被销毁,而是作为备用线程缓存在那里,当一个任务结束之后马上又有第二个任务,这个线程就会去执行第二个任务,省去了创建线程和销毁线程的步骤,节省开销


将任务投入线程池的方法:

executorService.submit(work);
其中的work是Runnable类

任务需要这样写:

Runnable work = new Runnable() {
	@Override
	public void run() {
		// TODO Auto-generated method stub
		Doingwork();
	}
};



线程中操作UI的方法

方法之一是handler:

final Handler handler = new Handler(){
	@Override
	public void handleMessage(Message msg){
		super.handleMessage(msg);
		if(msg.what == 1){
		   	UIWork();
		}
	}
};
msg是为了区分不同的UI操作,比如点这个按钮就改变这个label,点那个按钮就改变那个图片,需要写不同的message

下面是线程中的操作:

Message message = new Message();
message.what=1;
handler.sendMessage(message);
这样的话UIWork()就会在主线程中完成,而不是在创建的线程中,因此不能在handler中执行耗时任务



你可能感兴趣的:(安卓)