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

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

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

情景分析:

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

解决方案:

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

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

还有吗?

参考方案:

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

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

//一个观察者

private class MyContentObserver extends ContentObserver {

public MyContentObserver() {

super(new Handler());

}

@Override

public void onChange(boolean selfChange) {

super.onChange(selfChange);

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

//处理数据更新回调

refreshData();

}

}

private void refreshData() {

if (mCursor.isClosed()) {

return;

}

//更新

mCursor.requery();

}

//一个实现CursorAdapter的适配器

private MyAdapter mAdapter;

private Cursor mCursor;

private MyContentObserver mObserver;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list);

setupViews();

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

null, null, null);

mObserver = new MyContentObserver();

//注册观察者

mCursor.registerContentObserver(mObserver);

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

setListAdapter(mAdapter);

}

@Override

protected void onDestroy() {

super.onDestroy();

if (mCursor != null) {

mCursor.unregisterContentObserver(mObserver);

mCursor.close();

}

}

⋯⋯

⋯⋯

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

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

最新文章

  1. 【JavaScript】javascript中伪协议(javascript:)使用探讨
  2. string.empty和null的区别
  3. Percona Server 5.6.13-61.0 首个 GA 版本发布
  4. Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue
  5. CYQ.Data 数据框架 使用篇一 入门指南
  6. Emgu 决策树
  7. 关于Function.prototype.bind
  8. SQL查询 练习题
  9. 《Play for Java》学习笔记(五)Form
  10. Spark延长SparkContext初始化时间
  11. 【英语】Bingo口语笔记(50) - Drop系列
  12. perl 初始化Hash
  13. java学习——网络编程UDP
  14. 数据库和linq中的 join(连接)操作
  15. Powershell 执行外部命令
  16. Qt将窗体变为顶层窗体
  17. nginx、fastCGI、php-fpm关系梳理
  18. python从开始到放弃的途中一直很菜的day13
  19. Iroha and a Grid AtCoder - 1974(思维水题)
  20. 制作本地yum源

热门文章

  1. Oracle_SQL(2) 分组与聚合函数
  2. Autel MaxiSys MS906TS tire pressure settings Lexus LS460h
  3. CH6901 骑士放置
  4. CH#56C 异象石
  5. SQL Server 2008数据库连接错误
  6. Qt Creator + MinGW 在windows 下的调试GDB停止工作解决
  7. 厉害了,PS大神真的能改变世界!
  8. Vue 使用中的小技巧
  9. 3DES加密及.NET弱密钥处理
  10. 别人的Linux私房菜(3)主机规划与磁盘分区