ProgressDialog 和 handler (Android中的多线程)



         最近作了一个程序,就是把raw里的压缩文件,解压缩成数据库文件,然后放入项目里,这需要,一些时间,所以,我用了一个ProgressDialog来增加用户体验,也防止 kill Activity    ,首先看启ProgressDialog 然后再开启线程,当线程执行完成之后发送消息sendmessage,handler接受到msg.what 相匹配的消息之后,处理时间,把Dialog dismiss掉,

        ps:msg.arg1和msg.arg2是为了携带参数,作测试用的,在该例子中无实际用途

下面是一个傻瓜教程:

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		button = (Button) findViewById(R.id.button);
		et = (EditText) findViewById(R.id.edittext);
		tv = (TextView) findViewById(R.id.textview);



		initProgressDialog();
		Log.d(TAG, "thread run");

                //在onCreate 方法里开启线程
		new Thread(){

			public void run() {
				// TODO Auto-generated method stub
				Log.d(TAG, "run start");
				dbhelper = new DBManager(AttrActivity.this);//执行我需要进行的导入数据库的操作
				dbhelper.openDatabase();//////////////////////
				dbhelper.closeDatabase();/////////////////////
	//			handler.sendEmptyMessage(1);
				Message msg = new Message();
				msg.arg1 = 100;               //message.arg1 携带100
				msg.arg2 = 200;               //message.arg2 携带200
				msg.what = 1;
				handler.sendMessage(msg);     //发送msg消息
			}
		}.start();

                //handler 为处理消息
		Handler handler = new Handler(){

			@Override
			public void handleMessage(Message msg) {
				// TODO Auto-generated method stub
				super.handleMessage(msg);
				if(msg.what == 1){
                                //handler 通过msg.what 判断线程发给他的msg 如果符合,执行msg.what对应操作,当然msg携带的变量也可以取出
					Log.d(TAG, "msg.arg1 = " + msg.arg1);
					Log.d(TAG, "msg.arg2 = " + msg.arg2);
					
					mProgressDialog.dismiss();
				}
			}

		};




		button.setOnClickListener(this);
		sqldb = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/" + DBManager.DB_NAME, null);        
	}


	public void initProgressDialog(){
		mProgressDialog = new ProgressDialog(AttrActivity.this);
		mProgressDialog.setTitle("~~~");
		mProgressDialog.setMessage("aaa");
		//   	mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		mProgressDialog.show();
	}
 
 
 
     @Override         protected   void  onDestroy() {            //将线程销毁掉            mHandler.removeCallbacks(mRunnable);            super .onDestroy();       }  




你可能感兴趣的:(Android)