它是android系统提供的异步处理类,用于常用的异步交互处理。
**实例化AsyncTask
new AsyncTask<Params,Progress,Result>//参数1:启动任务执行的参数;参数2:后台任务执行的进度百分比;参数3:后台执行任务最终返回的结果
为了实例化一个异步任务,分4步,使用4个方法:
(1)onPreExecute()
(2)doInBackground(Params...);
(3)onProgressUpdate(Progress);
(4)onPostExecute(resulr);
实例:
new AsyncTask<Integer, Integer, String>() {
// UI显示
protected void onPreExecute() {
dialog = (, "呜呜",
"正在导出短信,请稍候....");
();
}
// 后台执行
protected String doInBackground(Integer... params) {
String input_number = ().toString();
String result = "";
// 导出所有短信
if (input_number.equals("")) {
List<String> listnumber = getAllNumber();
for (String number : listnumber) {
if (file_Write("", get_sms(number))) {
result += "号码" + number
+ "的所有短信已经导出到文件中\n";
} else {
result += "号码" + number + "的所有短信导出到文件失败\n";
}
}
}// 导出指定号码短信
else {
if (file_Write(input_number + ".txt",
get_sms(input_number))) {
result = "号码" + input_number + "的所有短信已经导出到文件"
+ input_number + ".txt中";
} else {
result = "号码" + input_number + "的所有短信导出到文件失败";
}
}
return result;
}
// 搜索完毕后,结果处理
protected void onPostExecute(String result) {
();
new ()
.setMessage(result).create().show();
(result);
}
}.execute(0);
无奈的是调试出来,doInBackground()这一步有错!
12-10 09:46:45.000: E/AndroidRuntime(802): FATAL EXCEPTION: AsyncTask #1
12-10 09:46:45.000: E/AndroidRuntime(802): : An error occured while executing doInBackground()
12-10 09:46:45.000: E/AndroidRuntime(802): at $(:200)
12-10 09:46:45.000: E/AndroidRuntime(802): at $(:274)
12-10 09:46:45.000: E/AndroidRuntime(802): at (:125)
12-10 09:46:45.000: E/AndroidRuntime(802): at $(:308)
12-10 09:46:45.000: E/AndroidRuntime(802): at (:138)
12-10 09:46:45.000: E/AndroidRuntime(802): at (:1088)
12-10 09:46:45.000: E/AndroidRuntime(802): at $(:581)
12-10 09:46:45.000: E/AndroidRuntime(802): at (:1019)
12-10 09:46:45.000: E/AndroidRuntime(802): Caused by:
12-10 09:46:45.000: E/AndroidRuntime(802): at (:184)
12-10 09:46:45.000: E/AndroidRuntime(802): at $1(:161)
12-10 09:46:45.000: E/AndroidRuntime(802): at $1$(:60)
12-10 09:46:45.000: E/AndroidRuntime(802): at $1$(:1)
12-10 09:46:45.000: E/AndroidRuntime(802): at $(:185)
12-10 09:46:45.000: E/AndroidRuntime(802): at $(:306)
12-10 09:46:45.000: E/AndroidRuntime(802): ... 4 more
网上解答:
窗体泄露错误
在谷歌后发现。窗体泄露的原因是有些dialog或则processDialog等引起的。这些空间依附的Activity已经关闭而这些控件还在运行中。所以导致bug
典型的场合是activity 和dialog同时显示 要先() 后() 如果直接finish() 会出错 但不影响功能
我的错误原因:
错误的主要原因在于AsyncTask的方法doInBackground()中调用的函数有错:有空指针异常的错误。
我的错误原因在Cursor空指针异常。
我在getAllNumber()方法中,用ConentResolver查询,得到的数据传给Cursor,查询条件 String[] projection = new String[] { "_id", "address", "person", "date" };
Uri uri = (SMS_URI_ALL);错把date写成data了,导致Cursor空指针异常。
改了这个错之后,程序就没问题了。
真的是马虎不得,一个字母的错误,整整闹腾了两个晚上。