当前位置:首页 » 安卓系统 » android异步加载数据

android异步加载数据

发布时间: 2023-08-06 05:48:37

Ⅰ android异步网络加载怎么实现

以自定义ListView,异步加载网络图片示例,总结了Android开发过程中,常用的三种异步加载的技术方案。

相关资源:

java"><manifestxmlns:android="http://schemas.android.com/apk/res/android"
02package="com.doodle.asycntasksample"
03android:versionCode="1"
04android:versionName="1.0">
05
06<uses-sdk
07android:minSdkVersion="8"
08android:targetSdkVersion="15"/>
09
10<uses-permissionandroid:name="android.permission.INTERNET"/>
11
12<application
13android:icon="@drawable/ic_launcher"
14android:label="@string/app_name"
15android:theme="@style/AppTheme">
16<activity
17android:name="com.doodle.asynctasksample.ThreadHandlerPostActivity">
18</activity>
19<activityandroid:name="com.doodle.asynctasksample.AsyncTastActivity">
20</activity>
21<activityandroid:name="com.doodle.asynctasksample.ThreadHandlerActivity">
22</activity>
23<activity
24android:name="com.doodle.asynctasksample.BootActivity"
25android:label="@string/title_activity_boot">
26<intent-filter>
27<actionandroid:name="android.intent.action.MAIN"/>
28<categoryandroid:name="android.intent.category.LAUNCHER"/>
29</intent-filter>
30</activity>
31</application>
32
33</manifest>

list_item.xml

01<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
02xmlns:tools="http://schemas.android.com/tools"
03android:layout_width="match_parent"
04android:layout_height="match_parent">
05
06<LinearLayout
07android:layout_width="match_parent"
08android:layout_height="150dp"
09android:layout_alignParentLeft="true"
10android:layout_alignParentRight="true"
11android:layout_alignParentTop="true">
12
13<ImageView
14android:id="@+id/imageView"
15android:layout_width="match_parent"
16android:layout_height="match_parent"
17android:src="<ahref="http://my.oschina.net/asia"target="_blank"rel="nofollow">@android</a>:drawable/alert_dark_frame"/>
18
19</LinearLayout>
20
21</RelativeLayout>

ImageAdapter.java

01/**
02*.
03*
04*.Inthis
05*
06*ListView.
07*
08*@authorJie.GengAug01,2012.
09*
10*/
{
12privateContextcontext;
13privateList<HashMap<String,Object>>listItems;
;
15
16publicImageViewimageView;
17
18publicImageAdapter(Contextcontext,List<HashMap<String,Object>>listItems){
19super();
20this.context=context;
21this.listContainer=LayoutInflater.from(context);
22this.listItems=listItems;
23}
24
25@Override
26publicintgetCount(){
27returnlistItems.size();
28}
29
30@Override
31publicObjectgetItem(intposition){
32returnnull;
33}
34
35@Override
36publiclonggetItemId(intposition){
37return0;
38}
39
40@Override
41publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
42if(convertView==null){
43convertView=listContainer.inflate(R.layout.list_item,null);
44imageView=(ImageView)convertView.findViewById(R.id.imageView);
45convertView.setTag(imageView);
46}else{
47imageView=(ImageView)convertView.getTag();
48}
49imageView.setImageDrawable((Drawable)listItems.get(position).get("ItemImage"));
50returnconvertView;
51}

Handler简介 Handler为Android提供了一种异步消息处理机制,它包含两个队列,一个是线程列队,另一个是消息列队。使用post方法将线 程对象添加到线程队列中,使用sendMessage(Message message)将消息放入消息队列中。当向消息队列中发送消息后就立 即返回,而从消息队列中读取消息对象时会阻塞,继而回调Handler中public void handleMessage(Message msg)方法。因此 在创建Handler时应该使用匿名内部类重写该方法。如果想要这个流程一直执行的话,可以再run方法内部执行postDelay或者 post方法,再将该线程对象添加到消息队列中重复执行。想要停止线程,调用Handler对象的removeCallbacks(Runnable r)从 线程队列中移除线程对象,使线程停止执行。

Ⅱ 安卓开发中提高安卓程序效率的15小技巧

安卓开发中提高安卓程序效率的15小技巧

对于一个安卓开发者来说,安卓开发中的提高安卓程序效率也是一项重要的内容,到底如何提高安卓程序效率,如何优化安卓的性能呢?以下达内南宁安卓培训部老师介绍了15种优化安卓的性能的小技巧,希望对广大的安卓开发者有所帮助!

1.http用gzip压缩,设置连接超时时间和响应超时时间

http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的浏览部分数据,实现离线阅读。

2.使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放袜冲置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待

3.尽量避免static成员变量引用资源耗费过多的实例,比如Context

4.listview性能优化

1).异步加载图片

item中如果包含有webimage,那么最好异步加载

2).快速滑动时不显示图片

当快速滑动列表时(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来

3).复用convertView

在getItemView中,判断convertView是否为空,如果不为空,可复用。如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外告贺。

4).BaseAdapter避免内存溢出

如果BaseAdapter的实体类有属性非常消耗内存,可以将保存到文件;为提高性能,可以进行缓存,并限制缓存大小。

5.对于一个安卓开发者来说,安卓开发中的提高安卓程序效率也是一项重要的内容,到底如何提高安卓程序效率,如何优化安卓的性能呢?以下本文就介绍了15种优化安卓的性能的小技巧,希望对广大的安卓开发者有所帮助!

6.保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursorclose掉;

7.异步任务,分为核心任务和普通任务,只有核心任务中出现的系统级错误才会报错,异步任务的ui操袜好派作需要判断原activity是否处于激活状态;

8.使用代替强引用,弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。

9.超级大胖子Bitmap及时的销毁(Activity的onDestroy时将bitmap回收,在被UI组件使用后马上进行回收会抛:Canvas:.graphics.Bitmap)设置一定的采样率(有开发者提供的图片无需进行采样,对于有用户上传或第三方的大小不可控图片,可进行采样减少图片所占的内存),从服务端返回图片,建议同时反馈图片的size巧妙的运用软引用drawable对应resid的资源,bitmap对应其他资源任何类型的图片,如果获取不到(例如文件不存在,或者读取文件时跑OutOfMemory异常),应该有对应的默认图片(默认图片放在在apk中,通过resid获取);

10.Drawable中ui组件需要用到的图片是apk包自带的,那么一律用或者,而不要根据resourceid

注意:get((),R.drawable.btn_achievement_normal)该方法通过resid转换为drawable,需要考虑回收的问题,如果drawable是对象私有对象,在对象销毁前是肯定不会释放内存的。

11.复用、回收Activity对象临时的activity及时finish主界面设置为singleTask一般界面设置为singleTop。

12.在onResume时设置该界面的电源管理,在onPause时取消设置。

13.应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据事件主动触发界面的更新。

14.如果ImageView的图片是来自网络,进行异步加载。

15.位置信息获取用户的地理位置信息时,在需要获取数据的时候打开GPS,之后及时关闭掉。

Ⅲ Android电子书app中,离线缓存是不是异步数据加载加载技术完成的,如果是,原理是什么

离线缓存就是在网络畅通的情况下将从服务器收到的数据保存到本地,当网络断开之后直接读取本地文件中的数据。
将网络数据保存到本地:
你可以自己写一个保存数据成本地文件的方法,保存在android系统的任意目录(当然是有权限的才行),但是在这种情况下使用Context的openFileOutput方法最简便也最符合我们的场景,下面的saveObject方法演示了如何用openFileOutput将数据保存在本地的一个文件中:
saveObject
public static boolean saveObject(Serializable ser, String file) {
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = AppContext.getInstance().openFileOutput(file, AppContext.getInstance().MODE_PRIVATE);
oos = new ObjectOutputStream(fos);
oos.writeObject(ser);
oos.flush();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
try {
oos.close();
} catch (Exception e) {
}
try {
fos.close();
} catch (Exception e) {
}
}
}

openFileOutput可以直接获得一个和应用关联的文件路径(在/data/data//files下面),然后使用java io中的ObjectOutputStream将序列化的对象写入(writeObject)到得到的文件中,你可以看到上面的实现过程有两个关键方法:openFileOutput、writeObject以及调用它们的两个关键对象Context和ObjectOutputStream。关于序列化可以参看这篇文章:Java对象的序列化和反序列化实践

Ⅳ Android 异步加载数据 创建子进程下载数据,ListView第一次加载无数据,第二次加载载才有数据

因为是异步的,你下载完数据;需要再 进行 adapter.notifyDataSetChanged();

Ⅳ Android ListView 实现异步 分页 加载导致的数据问题

在请求第二页及以后页数的时候带多一个参数,就是第一次请求到的数据的最后一条的id,当然服务端的每个数据都有id,id根据你的排序规律,排在前面的可以设置为大点的,最后面的为最小的。服务端根据请求过来id,就可以确认已经发送了此id之前的数据(包括id这条数据,id之前的数据有可能有新的数据插入,但是此时客户端需要的只是之后的数据,所以直接把id之后的10条数据发给客户端即可)。此外,如果客户端想获得新插入的数据,只要请求第一页就行了。

热点内容
python全双工 发布:2025-02-04 06:57:46 浏览:192
c语言动态内存 发布:2025-02-04 06:57:06 浏览:74
sql倒序查询 发布:2025-02-04 06:49:18 浏览:192
r7000p2021买哪个配置 发布:2025-02-04 06:40:17 浏览:965
如何消除微信小程序缓存 发布:2025-02-04 06:34:24 浏览:634
python27mysqldb 发布:2025-02-04 06:28:44 浏览:769
svn文件夹权限 发布:2025-02-04 06:23:47 浏览:902
师编程 发布:2025-02-04 06:22:51 浏览:170
加密类型wpa 发布:2025-02-04 06:21:27 浏览:178
互联网与云服务器 发布:2025-02-04 06:15:56 浏览:254