當前位置:首頁 » 安卓系統 » 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條數據發給客戶端即可)。此外,如果客戶端想獲得新插入的數據,只要請求第一頁就行了。

熱點內容
線程非同步java 發布:2025-03-16 16:51:52 瀏覽:257
軟體編程有哪些 發布:2025-03-16 16:46:07 瀏覽:478
最近上傳91 發布:2025-03-16 16:46:03 瀏覽:703
珍珠台編程 發布:2025-03-16 16:40:25 瀏覽:898
伺服器如何連接寬頻 發布:2025-03-16 16:31:19 瀏覽:656
電腦硬體消息查詢腳本 發布:2025-03-16 16:22:39 瀏覽:866
寶馬五系降價取消了哪些配置 發布:2025-03-16 16:09:41 瀏覽:240
學班java 發布:2025-03-16 16:09:00 瀏覽:598
切金磚解壓 發布:2025-03-16 16:08:45 瀏覽:774
資料庫流向圖 發布:2025-03-16 16:08:14 瀏覽:36