Android主執行緒中延時處理
Android對UI主執行緒開啟了實時監聽,Activity Manager和WindowManager系統服務一旦監聽到主執行緒超過10秒沒有響應操作,就會丟擲ANR,所以,在UI主執行緒中不能直接呼叫Thread.sleep方法去延時,超過10秒就根本不會執行後面的操作,當有必要在主執行緒中增加延時處理時,可以通過開啟子執行緒的方法:
new Thread(new Runnable(){
public void run(){
try {
Thread.sleep(70000 );
} catch (InterruptedException e) {
Log.e(TAG, "SLEEP throw e: "+ e.toString());
e.printStackTrace();
}
Message msg = new Message();
msg.arg1 = 1;
handler.sendMessage(msg);
}
}).start();
然後通過Handler將‘睡’的結果反饋給主執行緒:
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg) {
case 0:
//TODO
case 1:
//TODO
}
}
};
相關推薦
Android主執行緒中延時處理
Android對UI主執行緒開啟了實時監聽,Activity Manager和WindowManager系統服務一旦監聽到主執行緒超過10秒沒有響應操作,就會丟擲ANR,所以,在UI主執行緒中不能直接呼叫Thread.sleep方法去延時,超過10秒就根本不會執
android主執行緒中Looper.loop()為什麼不會造成程式ANR
程式入口為ActivityThread的main方法,原始碼如下: frameworks/base/core/java/android/app/ActivityThread.java public static void main(String[] args) { S
主執行緒上延時,使用postDelayed
1.主執行緒延時,使用post,imageview自帶一個handler,有postDelayed方法。imageview是主執行緒上的,所以Runable是執行在主執行緒中的程式碼。 imageview.postDelayed(new Runnable() {
Android面試:主執行緒中的Looper.loop()一直無限迴圈為什麼不會造成ANR?(轉)
引子: 正如我們所知,在android中如果主執行緒中進行耗時操作會引發ANR(Application Not Responding)異常。 造成ANR的原因一般有兩種: 只有當應用程式的UI執行緒響應超時才會引起ANR,超時產生原因一般有兩種 1. 當前的事件沒有機會
Android主執行緒向子執行緒中傳送資訊
主要用到了Handler類,Looper類和Message類 先介紹下這幾個類 Looper類,是用來為一個執行緒開啟一個訊息佇列,預設情況下Android下新開啟的執行緒沒有開啟訊息佇列的,除了主執行緒外,主執行緒系統會預設為其開啟一個訊息佇列;looper是通過MessageQueu
[轉]Android限制只能在主執行緒中進行UI訪問的實現原理
目錄 Android限制只能在主執行緒中進行UI訪問 Thread的實現 Android Thread 的構造方法 Android Thread 的start()方法 如何在我們自己的程式碼中去檢測當前Thread是不是UI執
Android 幾種非同步方式,解決主執行緒中遇到的卡頓
起因: 當我們的UI越來越複雜的時候,或者說某個業務需要大量的計算的時候,我們的主執行緒會消耗大量的資源去計算,這個時候,我們的Activity或者說fragmemt等UI頁面就會出現卡頓,乃至ANR。總結一下,就是我們直接在主執行緒(UI執行緒)中,做耗時操作,就會造成卡
java多執行緒中的異常處理
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Qt中通過訊號和槽在子執行緒和主執行緒中進行資料傳遞
QT中兩個執行緒之間進行自定義型別資料傳遞 兩個執行緒中進行資料傳遞時,傳遞的資料放到佇列中(queue),所以在這個過程中,需要在傳遞前將資料拷貝、儲存到佇列中;為了儲存這些引數,Qt需要construct、destruct、copy這些物件,為了讓Qt知道
WebTool 網頁資訊獲取,可在主執行緒中呼叫
WebTool.java package sci.tool; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.URL; import java.net.U
主執行緒中呼叫執行緒的start()
public class Quest implements Runnable { int b = 100; public synchronized void m1() throws Exception { System.out.println("en
子執行緒中的異常處理
前2種方法都是在子執行緒中處理,第3種方法是在父執行緒中處理。 具體用哪一種方法,取決於這個異常是否適合在子執行緒中處理。例如有些異常更適合由呼叫方(父執行緒)處理,那麼此時就應當用第3種方法。 方法一:子執行緒中try... catch... 最簡單有效的辦法,就是在子執行緒的執行方法中,把
Handler訊息傳遞機制(子執行緒中傳遞new Handler和主執行緒中new Handle傳遞訊息)
> 子執行緒中更新UI new Thread(new Runnable() { @Override public void run() { Looper.prepare();
關於android主執行緒不能訪問網路異常NetworkOnMainThreadException
獲取網路圖片: //圖片處理 ImageGetter imgGetter2 = new Html.ImageGetter() { public Drawable getDrawable(Stri
淺談android的執行緒安全和handler處理
android的UI操作不是安全的,同時也只有主執行緒才能操作UI,同時主執行緒對UI操作有一定的時間限制(最長5秒)。為了能夠作一些比較好使的操作(比如下載、開啟大檔案等),android提供了一些列機制。 執行緒安全:如果你的程式碼所在的程序中又多個執行緒
Android主執行緒不能訪問網路異常解決辦法 NetworkOnMainThreadException錯誤
Android Activity主執行緒預設情況下不允許訪問網路 轉自http://www.cnblogs.com/lyroge/p/3837902.html 從兩個方面說下這個問題: 1. 不讓訪問網路的原因 2. 解決該問題的辦法 不讓訪問網路的原因: 由於對於網
Android多執行緒中的Handler機制、Looper的介紹與整理
在多執行緒的開發中,Handler機制如同在主執行緒中執行一樣,只是需要注意在非主執行緒中Handler機制的使用限制,本文將對這些內容作出解釋。 如果在子執行緒中對上UI介面進行操作,將丟擲異常。為此,Android中引入了Handler訊息 傳遞機制,來實現在子建
Android子執行緒中更新UI的3種方法
//UI執行緒中執行 new DownloadImageTask().execute( "www.91dota.com" ); private class DownloadImageTask extends AsyncTask { protected String doInBackgrou
Android主執行緒(ActivityThread)原始碼分析
在寫這篇部落格之前,先丟擲一個問題,安卓應用程式的入口是什麼呢?我想不少人可能回答說:application的onCreate方法,其實並不是的,即使是application,也有一個方法比onCreate先執行,這個方法就是attachBaseContext(Context
在多執行緒中捕獲並處理RuntimeException
在多執行緒的機制下,我們不能跨越執行緒在主執行緒中捕獲其他執行緒的異常。 對於非執行時異常,線上程很多很複雜的時候,為每個執行緒都寫一份異常處理程式也很難過。對於執行時異常,如果我們不能採取一些有用的措施,那麼異常會被丟擲到控制檯上。 比如下面的例子: p