跟CursorLoader的使用很相似 只是 CursorLoader 里 public Loader<Cursor> onCreateLoader(int id, Bundle args)的方法中 一个是用CursorLoader 一个是用AsynckTaskLoader
AsyncTaskLoader的使用 有以下几点需要注意:1,必须有构造函数 2,必须是静态的内部类3,别忘了加权限
AsyncTaskLoader 的使用 代码:
package com.example.asynactaskloader;
import android.app.Activity;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.AsyncTaskLoader;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity implements LoaderCallbacks<Cursor>{
private ListView lv;
private TextView tv;
private LoaderManager loaderManager;
private SimpleCursorAdapter adapter;
private static ContentResolver contentResolver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.lv);
tv = (TextView)findViewById(R.id.tv);
loaderManager = getLoaderManager();//获取loader对象
loaderManager.initLoader(1, null, this);
contentResolver = getContentResolver();
adapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, null,
new String[]{"address","body"}, new int[]{R.id.tv_name,R.id.tv_content});
lv.setAdapter(adapter);
lv.setEmptyView(tv);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// TODO Auto-generated method stub
return new MyAsnycTaskLoader(MainActivity.this);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
// TODO Auto-generated method stub
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
// TODO Auto-generated method stub
adapter.swapCursor(null);
}
/**
* 自定义继承AsyncTaskLoader自己的loader
*
*/
public static class MyAsnycTaskLoader extends AsyncTaskLoader<Cursor>{
public MyAsnycTaskLoader(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
/**
* 当AsyncTaskLoader创建成功后启动加载数据的方法 启动加载
*/
@Override
protected void onStartLoading() {
// TODO Auto-generated method stub
super.onStartLoading();
System.out.println("------ThreadId-------"+Thread.currentThread().getId());
forceLoad();//必须要添加 表示强制向下执行 强制执行后台的异步任务加载数据
}
/**
* 后台开启工作线程执行耗时操作的方法 耗时操作 查询数据库多条数据
*/
@Override
public Cursor loadInBackground() {
// TODO Auto-generated method stub
System.out.println("------ThreadId-------"+Thread.currentThread().getId());
Cursor cursor= contentResolver.query(Uri.parse("content://sms"), null, null, null, null);
return cursor;
}
/**
* 执行完loadInBackground之后执行次方法 接受loadInBackground的结果
*/
@Override
public void deliverResult(Cursor data) {
// TODO Auto-generated method stub
super.deliverResult(data);
System.out.println("------ThreadId-------"+Thread.currentThread().getId());
}
}
}