Only the original thread that created a view hierarchy can touch its views的相關 | 屏蔽adobe flash player

來源:互聯網
上載者:User

很多網友在Android中使用多執行緒UI相關內容時可能會發現Logcat提示Only the original thread that

created a view hierarchy can touch its
views這樣的錯誤,這主要是Android的相關View和控制項不是安全執行緒的,我們必須做獨立的處理這點比J2ME麻煩一些,這裡Android給我們提供了很多方法,有關線程的,我們需要瞭解下J2ME中一些傳統的線程建立方法,比如Runnable或直接new
Thread(),大家需要瞭解UI線程、worker線程以及一些概念。今天android開發網說一種簡單的方法除了非同步任務AsyncTask外使用Handler可以很好的處理,和Win32的訊息很像。

  首先我們需要明白,主線程或者這裡說的原始線程original thread
一般情況下是UI線程,當然UI線程並不一定是主線程,我們不能長時間的阻塞該應用,在Android平台上可能會產生類似Force
close或Wait這樣的對話方塊這裡我們成為ANR,這裡除了使用ProgressDialog方式給用一個動態進度代表當前處理並沒有中斷可能需要
一些時間,所以android123告訴大家相關的網路處理可以使用工作者線程,但是worker 線程不能處理顯示元素即UI相關的View或
Widget包中的高層的控制項,所以通過一個Handler對象可以很好的傳遞Runnable或Message ,下面我們用一個簡單的例子來描述

  final Handler cwjHandler = new Handler();

   final Runnable mUpdateResults = new Runnable() {
public void run() {
updateUI();
}
};

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

     NetworkOperation();//一個很費時間的I/O操作,比如網路或檔案讀寫等等。

      }

    protected void NetworkOperation() {

        Thread t = new Thread() {
public void run() {
doSomething(); //處理得到結果了,這裡一些內容儲存在主類的成員變數中
cwjHandler.post(mUpdateResults); //高速UI線程可以更新結果了
}
};
t.start();
}

    private void updateUI() {

    //詳細的更新
}

使用以上方法,屏蔽adobe flash player載入flash的閃動現象,並不能很好的解決,flash載入閃動仍存在,但是這個線程方法本身是沒問題的。希望能解決flash抖動現象的人提建議或方案。具體代碼架構如下,

 

1、監聽事件,載入flash

forwardbtn.setOnClickListener(new ImageButton.OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub               
                mImgView.setVisibility(View.VISIBLE);
                loadFlash();

 

               //create thread
                createImgviewThread();   
            }
        });

 

線程函數:

private void createImgviewThread(){
        //start a thread
        new Thread(new Runnable(){
            //@Override
            public void run() {
                try {
                    Thread.sleep(2000);
                }catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                // TODO Auto-generated method stub                       
                mHandler.post(new Runnable(){
                    //@Override
                    public void run() {                                                       
                        // TODO Auto-generated method stub
                        mWebView.setVisibility(View.VISIBLE);                       
                    }});               
            }
            }).start();           
    }

 

參考:http://java-admin.javaeye.com/blog/789849

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.