最近作了一个程序,就是把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();
- }