0

我有做一個的AsyncTask的東西:傳遞參數的AsyncTask,並改變它們

private class Task extends 
     AsyncTask<Foo, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(Foo... params) { 
     // send foo to server; 
    } 
} 

在我的主類我做這樣的事情:

new Task().execute(foo); 
foo.setValue(0); 

請問FOO中的AsyncTask背景值永遠是舊的價值?或者,在AsyncTask執行任務之前,foo的值是否設置爲0?

謝謝!

回答

0

異步任務在不同的線程上運行,線程之間的通信應該通過使用處理程序的線程消息來完成。你不能像你在做的那樣改變一個異步任務的成員的值。

這裏是一個很好的教程,是所有關於線程,ASYN任務和處理程序:使用處理器http://www.vogella.com/articles/AndroidPerformance/article.html

還有更多的例子:http://code.google.com/p/meneameandroid/source/search?q=handleMessage&origq=handleMessage&btnG=Search+Trunk,使用處理器來執行的動畫:http://code.google.com/p/android-page-curl/source/browse/trunk/src/com/mystictreegames/pagecurl/PageCurlView.java

+0

我不想讓他們溝通。我想將foo的值發送到另一個線程中的服務器(而不是拖延應用程序)。但同時,我可以將foo的值設置爲另一個值(在主線程中)以繼續使用該新值的主線程計算,而不影響傳遞給AsyncTask的值? – sile 2012-04-29 09:54:57

+0

但是,如果您同時更改線程和主線程中的值,則會出現問題,如果要訪問共享變量,則必須使用同步塊鎖定acces:http://tutorials.jenkov的.com/java的併發/ synchronized.html。 – Moss 2012-04-29 11:08:44

+0

是的,但它只在主線程中更改,而不是在AsyncTask中(它只是發送到服務器)。也許我應該拿一份foo的副本... – sile 2012-04-30 08:58:18

相關問題