好久没有更新博客了。不是没时间写,而是太懒。而且感觉有些东西没有时间总结,之之后再想写,就想不起来了。晚上新发现一点东西,所以就及时写下来。

最近利用业余时间在看Android的Download模块,看得是2.3之前版本的源码,2.3之后android就开放了一个下载管理器,并提供了一些api。不过想对下载模块有更深入的了解还是必须自己花点时间看看downloadprovider的源码。相信会收获很多。如果有时间想写写文章对downloadprovider进行分析。

这篇文章不是分析download的,不过却是我从读download的源码发现的。

情景分析:

我们有一个Service,这个Service在后台会不断的更新多条数据,我们又想将不断更新的数据展现在ui上面这时你是怎么解决的呢?其实就是类似有些浏览器的下载管理器界面,有没有想过是怎么实现的??

解决方案:

1,使用通知,只能在通知栏看到更新,加入用户想在一个activity中有个进度显示呢?

2,发送更新广播,当是在一个listView中的多个列需要更新广播就有点吃力了;

还有吗?

参考方案:

利用Provider将数据持久化,再用Cursor监听Provider的变化来更新数据。当然这需要中Service update数据。

-----部分代码-------

//一个观察者

privateclassMyContentObserverextendsContentObserver {

publicMyContentObserver() {

super(newHandler());

}

@Override

publicvoidonChange(booleanselfChange) {

super.onChange(selfChange);

Log.i("DLA","MyContentObserver onChange!");

//处理数据更新回调

refreshData();

}

}

privatevoidrefreshData() {

if(mCursor.isClosed()) {

return;

}

//更新

mCursor.requery();

}

//一个实现CursorAdapter的适配器

privateMyAdaptermAdapter;

privateCursormCursor;

privateMyContentObservermObserver;

@Override

protectedvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list);

setupViews();

mCursor= getContentResolver().query(MyProvider.CONTENT_URI,sAppReadableColumnsArray,

null,null,null);

mObserver=newMyContentObserver();

//注册观察者

mCursor.registerContentObserver(mObserver);

mAdapter=newMyAdapter(this, R.layout.list_item,mCursor);

setListAdapter(mAdapter);

}

@Override

protectedvoidonDestroy() {

super.onDestroy();

if(mCursor!=null) {

mCursor.unregisterContentObserver(mObserver);

mCursor.close();

}

}

⋯⋯

⋯⋯

这样实现后当MyProvider.CONTENT_URI对应的数据发生变化时都会调用观察者的onChange方法,mCursor.requery()执行后listview就直接更新了。(不知道在其他类型的Adapter中是否自动更新,而不需要调用adapter的notifyDataSetChanged)

--------end--------

原文http://www.cnblogs.com/halzhang/archive/2011/07/16/2108470.html

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android数据与界面绑定工具简述
  3. KCommon-使用Kotlin编写,基于MVP的极速开发框架
  4. 【Android企业级开发案例分享】仿西瓜视频主页面框架,自定义GridL
  5. Android(安卓)中 ListView 分页加载数据
  6. 在android下出现乱码的问题(在网络中传输和获取数据时)
  7. Android(安卓)11正式发布:小米、OPPO等手机将陆续更新
  8. ANDROID 中UID与PID的作用与区别
  9. Android通讯录开发之解决快速搜索联系人线程同步问题

随机推荐

  1. 【Android】私有目录获取方法
  2. Android(安卓)Touch 触摸事件
  3. [原创] Android(安卓)GPS (当前位置 & GPS
  4. android 控制按钮各个状态的样式
  5. Android(安卓)实现文件上传功能(upload)
  6. Windows平台下如何使用Android(安卓)NDK
  7. Android系统原理及开发要点详解
  8. Android中APK安装过程及原理解析
  9. Android从代码到apk的编译过程
  10. 深度揭秘android摄像头的autoFocus-----