Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 高級開發 >> Only the original thread that created a view hierarchy can touch its views的相關

Only the original thread that created a view hierarchy can touch its views的相關

編輯:高級開發

 很多網友在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() {

//詳細的更新
}

有關Java以及android的線程,我們將在以後的內容中介紹到,本次由於[email protected] 郵箱中的相關內容講到這些,以後我們會告訴大家一些線程同步以及死鎖問題的解決方法,總體而言感覺相對於Windows Mobile平台,Android上的線程消耗過大,而SymBian的活動對象又相對保守,總的而言android線程相對簡單。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved