Android的两种异步调用
1. Handler + Thread
由主线程打开对话框, 然后使用新的线程(Handler.sendMessage(message))对它进行操作, 包括修改和关闭等.
定义
由主线程打开对话框, 然后使用新的线程(Handler.sendMessage(message))对它进行操作, 包括修改和关闭等.
定义
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Java代码 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); //To change body of overridden methods use File | Settings | File Templates. switch (msg.what) { case PRO_ADD: progressBar.setProgress(count); break; } } } |
调用
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
Java代码 package com.example.ADemo6; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.Toast; public class MyActivity extends Activity { /** * Called when the activity is first created. */ private static final int PRO_ADD = 1; private ProgressBar progressBar; private MyHandler myHandler = new MyHandler(); private int count=0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button1 = (Button) findViewById(R.id.button1); progressBar = (ProgressBar) findViewById(R.id.progressBar); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final int max = progressBar.getMax(); Thread thread = new Thread(new Runnable() { @Override public void run() { try { for (int i = 0; i < max; i++) { Message message = new Message(); Thread.sleep(50); if (i > 100) { count = 100; message.what = PRO_ADD; myHandler.sendMessage(message); } else { count = progressBar.getProgress()+2; message.what = PRO_ADD; myHandler.sendMessage(message); } } } catch (InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } }); thread.start(); } }); } } |
2. AsyncTask,参考:http://www.cnblogs.com/jingd/archive/2012/03/10/2389648.html
异步处理程序
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Java代码 class AnsyTry extends AsyncTask<String, TextView, Double> { TextView te = null; public AnsyTry(TextView te) { super(); this.te = te; } @Override protected Double doInBackground(String... params) { double dou = 0; dou = 100; searchFromWebService(te); //处理事情的方法...... publishProgress(te); return dou; } @Override protected void onPostExecute(Double result) { super.onPostExecute(result); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onProgressUpdate(TextView... values) { super.onProgressUpdate(values); } } |
调用:
|
1 2 3 |
Java代码 AnsyTry anys = new AnsyTry(textView2); anys.execute(); |
