发中如果涉及到了比较耗时的工作,之前做法是利用ProgressDialog做界面有好提示,新开现成做耗时操作,最后用Handler做UI线程的修改。界面如下:

oncreate方法:
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- progressDialog = new ProgressDialog(MainActivity.this);
- progressDialog.setMessage("Loading…");
- progressDialog.show();
-
- new Thread(new Runnable() {
-
- @Override
- public void run() {
- //这里作比较耗时的工作,暂时用线程休眠2秒作替代。
- try {
- Thread.sleep(4*1000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- myHandler.sendMessage(myHandler.obtainMessage());
- }
- }).start();
- }
复制代码
先show一个dialog,然后新开Thread做耗时操作,最后调用handler的sendMessage,唤醒Handler。handler写法如下:
- private Handler myHandler = new Handler(){
- @Override
- public void handleMessage(Message msg) {
- progressDialog.dismiss();
- super.handleMessage(msg);
- }
-
- };
复制代码
Android还有另一种方式实现就是利用AsyncTask,主要代码如下:
- private class DownloadFilesTask extends AsyncTask {
- @Override
- protected Void doInBackground(Void… params) {
- //耗时操作,
- try {
- Thread.sleep(4*1000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(Void result) {
- //作UI线程的修改。
- progressDialog.dismiss();
- super.onPostExecute(result);
- }
- }
复制代码
这样也实现了同样的功能,而且不需要自己新开线程。AsyncTask的详细解释见:http://developer.android.com/reference/android/os/AsyncTask.html