好久没有更新博客了。不是没时间写,而是太懒。而且感觉有些东西没有时间总结,之之后再想写,就想不起来了。晚上新发现一点东西,所以就及时写下来。
最近利用业余时间在看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--------
感谢:http://www.cnblogs.com/halzhang/archive/2011/07/16/2108470.html
分享到:
相关推荐
本项目“Android源码——GridView + ViewFlipper布局界面,模仿“机锋市场”是一个实例,展示了如何利用这两个组件来实现类似应用商店的布局效果。 **GridView** 是一个二维网格视图,它可以展示一系列的项目,每个...
在Android开发中,创建丰富的用户界面是至关重要的。本示例着重讲解如何使用GridView和ViewFlipper组件来构建一个类似于“机锋市场”的布局界面。这两个组件是Android SDK中的核心视图容器,能够帮助开发者实现复杂...
综上所述,这个示例代码涵盖了Android开发中的多项核心技能,包括ListView的使用、Adapter的自定义、事件监听、数据操作以及界面更新等,是学习Android UI和数据管理的一个很好的实践案例。通过深入研究,开发者可以...
本压缩包"安卓Android源码——精仿QQ设置界面.zip"提供了一个精仿QQ应用设置界面的示例项目,名为QQUIDemo,旨在帮助开发者学习如何在Android平台上构建类似QQ的用户交互体验。以下是对这个项目的详细解析: 首先,...
内容概要: ...能学到什么:ContentProvider、ContentResolver、CursorAdapter、Cursor、后台服务、前台服务、绑定服务、自定义广播、播放进度条、OnClickListener监听器 适用人群:Android开发初学者
- **Java编程**:源码主要使用Java语言编写,展示了如何利用Java面向对象的特点来实现Android应用的功能。 2. **Android应用程序结构** - **Activity**:源码中包含一个或多个Activity,它们代表了用户界面的不同...
在Android开发中,CursorAdapter是连接数据库查询结果(Cursor对象)与ListView、GridView等视图组件的重要桥梁。它主要用于展示SQLite数据库中的数据。本篇文章将深入探讨如何在Android应用程序中有效地使用...
在这个"android demo,listview,cursorAdapter的使用"项目中,我们将深入探讨如何利用这些组件来构建一个功能完善的列表应用。 首先,ListView是Android中的一个视图容器,它可以动态加载和显示大量的数据项。它的...
本资源"安卓Android源码——通讯录的开发_完整代码.zip"提供了一个完整的通讯录应用开发案例,可以帮助开发者深入理解Android系统中关于联系人管理的底层机制以及UI设计的实践技巧。 1. **Android源码分析** - **...
androidx-cursoradapter-1.0.0.aar
在Android应用开发中,创建一个具有选项卡切换效果的用户界面是常见的需求。这个压缩包文件"Android--开发--ActivityGroup + GridView + ViewFlipper 实现选项卡.rar"提供了使用ActivityGroup、GridView和...
"安卓Android源码——HorizontalListView仿微信发起群聊.zip" 这个标题揭示了我们关注的核心知识点是关于Android平台的源码实现,具体是一个模仿微信功能的应用,即创建一个横向滚动的ListView,用于模拟微信中的...
在安卓(Android)开发中,实现按字母索引滑动的功能是提高用户界面(UI)交互性和用户体验(UX)的重要手段。这种功能常见于联系人应用或者任何需要按字母顺序快速定位内容的列表中。本资源"安卓Android源码——按...
通过阅读和分析这部分代码,开发者能够更深入地理解ListView的工作原理,例如如何在Adapter中复用convertView,何时调用notifyDataSetChanged()更新界面,以及如何处理滑动事件等。 此外,学习ListView源码还能帮助...
"Android源码——查询工具源代码.7z"是一个压缩包,包含了与Android查询工具相关的源代码及辅助资源,旨在帮助开发者深入理解Android系统中的数据查询机制。这个压缩包包括了多个图片文件(可能是用于展示查询工具...
在这个“安卓Android源码——gridview分页效果.zip”压缩包中,我们可能找到了一个实现GridView分页效果的示例项目。接下来,我们将深入探讨GridView以及如何在Android中实现分页功能。 首先,GridView是Android中...
CursorAdapter是Android开发中用于将SQLite数据库查询结果与ListView、GridView等视图组件绑定的关键类。它是一个适配器,负责在数据模型(通常是数据库游标)和UI组件之间架起桥梁,使得数据显示和更新更加方便高效...
在安卓(Android)开发中,动态添加表格行是一项常见的任务,尤其在构建数据展示或用户交互界面时。这个“安卓Android源码——android动态添加表格行.zip”压缩包可能包含了示例代码,用于演示如何在运行时动态创建...
"TabHost"是Android开发中的一个关键组件,用于实现多标签页的切换效果,通常在构建具有多个可选视图的应用中使用。 【描述分析】 描述中提到的"安卓Android源码——高仿网易客户端UI(tabhost).zip"与标题一致,...
在Android开发中,为了提供丰富的用户体验,我们常常需要实现类似美团网那样,用户可以通过左右滑动来查看不同分类的功能。这种效果通常是通过结合使用ViewPager和GridView来实现的。本篇文章将深入探讨如何利用这两...