當前位置:首頁 » 安卓系統 » android耗時操作

android耗時操作

發布時間: 2022-05-12 02:29:59

❶ Android的handler機制的原理

Android的handler機制的原理分為非同步通信准備,消息發送,消息循環,消息處理。

1、非同步通信准備

在主線程中創建處理器對象(Looper)、消息隊列對象(Message Queue)和Handler對象。

2、消息入隊

工作線程通過Handler發送消息(Message) 到消息隊列(Message Queue)中。

3、消息循環

消息出隊: Looper循環取出消息隊列(Message Queue) 中的的消息(Message)。

消息分發: Looper將取出的消息 (Message) 發送給創建該消息的處理者(Handler)。

4、消息處理

處理者(Handler) 接收處理器(Looper) 發送過來的消息(Message),根據消息(Message) 進行U操作。

handler的作用

handler是android線程之間的消息機制,主要的作用是將一個任務切換到指定的線程中去執行,(准確的說是切換到構成handler的looper所在的線程中去出處理)android系統中的一個例子就是主線程中的所有操作都是通過主線程中的handler去處理的。

Handler的運行需要底層的 messagequeue和 looper做支撐。



❷ android list集合中多個耗時操作如何執行

不用for循環,用遞歸調用,非同步任務結束時調用自己就行

❸ android service可以進行耗時操作嗎

不可以的。android 開發中, 主線程都不可以寫耗時操作, 不管是application activity 還是service, 如果在主線程中寫了耗時操作,很容易引起ANR, 應用程序無響應. 耗時操作應該用子線程處理.

❹ android 耗時操作放在哪

ndroid手機應用開發中,耗時操作有:
下載文件操作2.網路連接操作(尤其是網路不好的時候)3.音頻格式轉換操作4.文件操作5.比較大的數據的初始化操作6.sleep函數等

❺ android application里能不能寫耗時操作

android application當然不能寫耗時操作,因為應用一開始就會執行application裡面的語句

❻ android中如何處理耗時操作,asyncTask有什麼不足之處

耗時操作處理:放到非同步線程中進行操作。

Asynctask的不足之處:
1.AsyncTask可能存在新開大量線程消耗系統資源和導致應用FC的風險
2.AsyncTask一旦執行了 doInBackground,就算調用取消方法,也會將doInBackground裡面的代碼執行完畢,才會停止。
3.線程池不經維護,當大量非同步發生時,導致線程池滿了,會出異常。

❼ android哪些操作是耗時操作

耗時操作主要有下載文件操作,網路連接操作(尤其是網路不好的時候)音頻格式轉換操作,文件操作,比較大的數據的初始化操作,sleep函數等,
你說的感測器的狀態監聽操作,僅僅是注冊了一個函數到framework層去,下層在收到感測器的消息後會調用你注冊的這個函數,這個並不是什麼耗時的操作。

❽ android平台的音樂播放器,播放音樂(這應該是一個很耗時的操作)能不能在子線程中實現

Android平台實現音樂播放器,如果單單將播放音樂的操作放在子線程中進行會有一些問題:

  1. Thread所在的Activity優先順序低,容易被系統殺死。如果程序在後台,Thread所在的Activity很可能因為內存不足被系統殺死。(音樂播放器常常會在後台運行,因為用戶往往在聽歌時會瀏覽其他應用。)

  2. 如果在播放音樂時需要更新Activity的UI界面,單單運用Thread會播出異常。

參考思路:可以將播放音樂的操作放在Service中進行,如果需要更新UI,可以使用Hanlder與Activity建立通信。

❾ 如何優化 android 系統應用的啟動速度

一、應用的啟動

啟動方式

通常來說,在安卓中應用的啟動方式分為兩種:冷啟動和熱啟動。

  • 1、冷啟動:當啟動應用時,後台沒有該應用的進程,這時系統會重新創建一個新的進程分配給該應用,這個啟動方式就是冷啟動。

  • 2、熱啟動:當啟動應用時,後台已有該應用的進程(例:按back鍵、home鍵,應用雖然會退出,但是該應用的進程是依然會保留在後台,可進入任務列表查看),所以在已有進程的情況下,這種啟動會從已有的進程中來啟動應用,這個方式叫熱啟動。

  • 特點

    1、冷啟動:冷啟動因為系統會重新創建一個新的進程分配給它,所以會先創建和初始化Application類,再創建和初始化MainActivity類(包括一系列的測量、布局、繪制),最後顯示在界面上。

    2、熱啟動:熱啟動因為會從已有的進程中來啟動,所以熱啟動就不會走Application這步了,而是直接走MainActivity(包括一系列的測量、布局、繪制),所以熱啟動的過程只需要創建和初始化一個MainActivity就行了,而不必創建和初始化Application,因為一個應用從新進程的創建到進程的銷毀,Application只會初始化一次。

    上面說的啟動是點擊app的啟動圖標來啟動的,而另外一種方式是進入最近使用的列表界面來啟動應用,這種不應該叫啟動,應該叫恢復。

    二、應用啟動的流程

    安卓系統上,應用在沒有進程的情況下,應用的啟動都是這樣一個流程:當點擊app的啟動圖標時,安卓系統會從Zygote進程中fork創建出一個新的進程分配給該應用,之後會依次創建和初始化Application類、創建MainActivity類、載入主題樣式Theme中的windowBackground等屬性設置給MainActivity以及配置Activity層級上的一些屬性、再inflate布局、當onCreate/onStart/onResume方法都走完了後最後才進行contentView的measure/layout/draw顯示在界面上,所以直到這里,應用的第一次啟動才算完成,這時候我們看到的界面也就是所說的第一幀。

    所以,總結一下,應用的啟動流程如下:

    Application的構造器方法——>attachBaseContext()——>onCreate()——>Activity的構造方法——>onCreate()——>配置主題中背景等屬性——>onStart()——>onResume()——>測量布局繪制顯示在界面上。

    三、測量應用啟動的時間

    在上面這個啟動流程中,任何一個地方有耗時操作都會拖慢我們應用的啟動速度,而應用啟動時間是用毫秒度量的,對於毫秒級別的快慢度量我們還是需要去精確的測量到到底應用啟動花了多少時間,而根據這個時間來做衡量。

    什麼才是應用的啟動時間

    從點擊應用的啟動圖標開始創建出一個新的進程直到我們看到了界面的第一幀,這段時間就是應用的啟動時間。

    我們要測量的也就是這段時間,測量這段時間可以通過adb shell命令的方式進行測量,這種方法測量的最為精確,命令為:

  • adb shell am start -W [packageName]/[packageName.MainActivity]

  • 執行成功後將返回三個測量到的時間:
    1、ThisTime:一般和TotalTime時間一樣,除非在應用啟動時開了一個透明的Activity預先處理一些事再顯示出主Activity,這樣將比TotalTime小。
    2、TotalTime:應用的啟動時間,包括創建進程+Application初始化+Activity初始化到界面顯示。
    3、WaitTime:一般比TotalTime大點,包括系統影響的耗時。

    下面是測量一個應用冷啟動和熱啟動的時間:
    冷啟動:

    熱啟動:

    以上就是本文的全部內容,希望對大家學習Android軟體編程有所幫助。

❿ android 耗時操作怎麼處理

handler其實就是消息處理機制。首先在主線程也就是UI創建一個Handler對象,復寫其中的handMessage( Message msg)方法。該方法里的msg就是子線程發來的消息,表示子線程處理完了,以這個msg來通知主線程。讓主線程來作UI的繪制工作。

那麼子線程工作完了就要發消息了,比如:
run(){
data = getDataFromInternet();//耗時工作
Message msg = handler.obtainMessage(0, data);//通過handler得到消息,該消息的標識為0,消息內容是data
handler.sendMessage(msg);//發送
}
然後handler在主線程就負責接收:
public Handler handler = new Handler(){//處理UI繪制

@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
data = (List<Map<String, Object>>) msg.obj;
if(data == null){
Toast.makeText(AllMovieActivity.this, "網路連接失敗,獲取不到影片信息", 1).show();
}else {

adapter = new HotMoviedapter(AllMovieActivity.this, data, R.layout.allmovielist_item,
new String[] { "picurl", "chname", "director", "leadrole",
"fshowtime", "country" }, new int[] { R.id.picurl,
R.id.chname, R.id.director, R.id.leadrole,
R.id.fshowtime, R.id.country },mListView);
TextView v = new TextView(AllMovieActivity.this);
v.setHeight(80);
v.setSelectAllOnFocus(false);
mListView.addFooterView(v);
mListView.setAdapter(adapter);
}
break;

default:
break;
}
}
};

熱點內容
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:124
作為基線存儲 發布:2025-05-16 08:15:22 瀏覽:858
安卓怎麼關閉手機應用推薦 發布:2025-05-16 08:03:38 瀏覽:929
sql內置函數 發布:2025-05-16 08:03:34 瀏覽:922
怎麼看伺服器內存型號 發布:2025-05-16 08:03:30 瀏覽:812
哪裡修安卓手機最好 發布:2025-05-16 07:58:25 瀏覽:825
伺服器和電腦是什麼區別 發布:2025-05-16 07:58:24 瀏覽:720
安卓116是什麼意思 發布:2025-05-16 07:44:59 瀏覽:591
配置低而動力好的車怎麼選 發布:2025-05-16 07:44:15 瀏覽:900
如何退出登錄的伺服器界面 發布:2025-05-16 07:41:58 瀏覽:71