现在的位置: 首页 > 综合 > 正文

Android开发中的Handler和多线程

2013年08月23日 ⁄ 综合 ⁄ 共 2531字 ⁄ 字号 评论关闭

    在Android开发中我们常常用到Handler这个类去处理消息队列中的消息,以下这个例子实现的是利用Handler传递一个消息给线程,线程运行run()方法去更新进度条的进度,以下是源代码:

public class MainActivity extends Activity {
	private Button button;
	private Button button2;
	private Button button3;
	private ProgressBar progressBar;
	private int counter=1;


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.d("BruceZhang", "mainActivity--->"+Thread.currentThread().getId());
		Log.d("BruceZhang", "mainActivity--->"+Thread.currentThread().getName());
		
		button=(Button)findViewById(R.id.button1);
		button2=(Button)findViewById(R.id.button2);
		button3=(Button)findViewById(R.id.button3);
		progressBar=(ProgressBar)findViewById(R.id.progressbar);
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				//handler.post(runnable);
			}
		});
		button2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//handler.removeCallbacks(runnable);
			}
		});
		button3.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				if(counter==1){
				handler.post(runnable);
				}
				else if (counter==2) {
					progressBar.setVisibility(View.VISIBLE);
					progressBar.setProgress(0);
				}
				}
		});
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				Log.d("BruceZhang", "Thread--->"+Thread.currentThread().getId());
				Log.d("BruceZhang", "Thread--->"+Thread.currentThread().getName());
			}
		}).start();
	
	}
	/* Handler handler=new Handler();
     Runnable runnable=new Runnable() {
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			Log.d("runnable", "update");
		    handler.postDelayed(runnable, 2000);
		}
	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}*/
	@SuppressLint("HandlerLeak")
	Handler handler=new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			progressBar.setProgress(msg.arg1);
			handler.post(runnable);
		}
		
	};
   Runnable runnable=new Runnable() {
		int i=0;
		@Override
		public void run() {
			Log.d("BruceZhang", Thread.currentThread().getId()+"");
			Log.d("BruceZhang", Thread.currentThread().getName());
			// TODO Auto-generated method stub
			i+=10;
			Message message=handler.obtainMessage();
			message.arg1=i;
			try {
				Thread.sleep(1000);
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
			handler.sendMessage(message);
			if(i>=progressBar.getMax()){
				handler.removeCallbacks(runnable);
				progressBar.setVisibility(View.GONE);
				counter+=1;
			}
		}
	};


}

抱歉!评论已关闭.