ProgressDialogとhandler(Androidのマルチスレッド)

2531 ワード

最近プログラムを作って、rawの中の圧縮ファイルを解凍してデータベースファイルに解凍して、それからプロジェクトの中に入れて、これは少し時間がかかります.だから、私はProgressDialogを使ってユーザーの体験を増加して、kill Activityを防止して、まずProgressDialogを起動してからスレッドを開いて、スレッドの実行が完了した後にメッセージsendmessageを送って、handlerはmsgに受け入れます.メッセージが一致した後、処理時間、Dialog dismissを削除します.
        ps:msg.arg 1とmsg.arg 2はパラメータを携帯するためのテスト用であり,この例では実用的な用途はない.
次はバカチュートリアルです.
	@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();  
    }