1. 程式人生 > >Android主執行緒中延時處理

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