2010-06-10 42 views
0

當談到線程和方位的變化,看來正常的事情是這樣的:多個線程和方向改變的問題

public class Bwent extends Activity { 
    private static Bwent instance; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     instance = this; 
    } 

    //... 

這樣,如果你正在做一個網絡請求線程和某人改變了電話的方向,線程將知道使用新的活動。

但是,線程可能會在Android正在銷燬舊的Activity並創建一個新的Activity期間完成?

在線程仍然可能指向錯誤的活動或部分被破壞的活動的過程中,是否有一段時間?

看起來應該不是,但即使使用在主線程中創建的Handler,我也遇到間斷性問題,嘗試更新不再存在的對象。這很少見,但它確實發生。

回答

1

當談到線程和 方位的變化,似乎 正常的事情是一樣的東西 這樣:

這是一個事。我不確定這是否是「正常」的事情。我懷疑這是最好的事情。

但是,是有可能的是, 線程可以在時間 Android是摧毀舊活動 並創建一個新的完嗎?

是。你的代碼中沒有任何東西阻止它。

是否有在 線程仍可能會指向 的過程中時刻錯誤的活動,或部分 破壞活動?

是。你的代碼中沒有任何東西阻止它。

取而代之,嘗試the pattern that I illustrate here。使用AsyncTask,實現爲靜態內部類或公共類。讓它成爲了解活動的人。是否只使用doPostExecute()(或可能是onPublishProgress())中的活動。從AsyncTaskHandler的工作方式來看,我們的理解是AsyncTask在那些主線程方法中始終有一個Activity

一些這東西was discussed recently

+0

這基本上就是我正在做的。但是,似乎AsyncTask仍然有可能引用當前正在被銷燬的Activity(doPostExecute)。 – synic 2010-06-10 23:51:44

+1

@synic:波士頓街和我還沒有遇到它。而且,如果這是真的,那麼除了讓你的活動避免破壞/重建週期之外,你無能爲力。 – CommonsWare 2010-06-11 00:12:12

+0

波士頓的街道? – synic 2010-06-11 05:18:42