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