2012-05-08 71 views
0

在我的應用程序中,我有兩個線程(我使用AsyncTask類)。在我調用我自己的getNewsItems(Url url)方法的每個線程的doInBackground()方法中,此方法將連接到服務器並獲得響應。之後在方法的每個線程中,我會調用displayData()方法在屏幕上顯示結果。Android,如何通過兩個不同的線程訪問常用方法?

問題是當我運行時,應用程序崩潰。我認爲它是因爲這兩個線程可以在同一時間訪問常用方法,因爲當我將常用方法分開時,該應用程序將成功運行。我不知道是不是因爲不使用序列化?

謝謝

回答

0

,你可以把一個​​修改你的方法被多個線程訪問。

例如

public synchronized void getNewsItems(Url url){ 
    //some logic here 
} 

使得,當一個線程正在執行的對象同步方法,來調用同步方法針對同一對象塊(掛起執行),直到第一線程所有其他線程與該對象進行。

,你還可以在這裏讀到它:http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html

UPDATE:

你可以有getNewsItems(Url url)在一個單獨的類是這樣的:

public class NewsItems{ 
    getNewsItems(Url url){ 
    //some logic here 
    } 
} 

,然後你的線程內等進行實例化這個:

public void run(){ 
    NewsItems ni = new NewsItems(); 
    ni.getNewsItems(url); 
} 

這樣,同樣的方法將被稱爲,但在不同的類實例...

+0

感謝親愛的stjom,我做到了,但應用程序也崩潰了。我不知道爲什麼它會這樣。我寫了兩個getNewsItems(Url url)和兩個displayData()。它工作正常,但我不喜歡這種方式,因爲我重複了兩個相同的方法:( – Hesam

+0

你可以把這些方法放在一個單獨的類中,只是在線程中初始化它們。這樣,同樣的方法被調用,但是在不同的實例中。 – PinoyCoder

+0

您好Hesam,我更新了代碼,您可以嘗試一下,以便您的代碼看起來更乾淨。=) – PinoyCoder

0

當兩個線程有​​權訪問常用方法時沒有問題。在不同的課程中製作常用的方法,然後將不同的對象分享給兩個不同的線程。不要讓常用方法靜態同步。

相關問題