2014-05-16 48 views
2

我一直在線上搜索很長時間。也許我在這裏做的是錯誤的。從線程傳遞值到主要活動

我已經在MainActivity.java的單獨文件中編寫了一個線程類。由於線程和主要活動都相對較長,因此我決定將它們分成不同的文件。

我想將線程類生成的某些值傳遞給主要活動。最初我想使用處理程序。但是因爲線程與主要活動在不同的類中。它不知道我在主要活動中定義的處理程序。

public class mythread implements Runnable{ 
    @Override 
    public void run(){ 
     result = result_from_some_task(); 
    } 
} 

這是我的線程類的基本結構,我想將結果傳遞迴主要活動。我已經看了很多例子,其中大部分線程都在主要活動類中,並且定義的處理程序可以很容易地引用。

意圖似乎並不適用。有沒有人有這樣的操作可以完成的任何想法?

在此先感謝。

+0

你需要一個處理程序。 –

+0

在主要活動或線程中?其他班級如何知道處理程序的存在? –

回答

5

製作AnotherClass的參數化構造函數,並在製作AnotherClass的對象時,只需將MainActivity的對象傳遞給該構造函數,並在AnotherClass類中調用MainActivity的方法,然後只需從該Object調用該方法即可。

檢查下面的代碼:

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    AnotherClass object= new AnotherClass (this); 
    object.start(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void makeSomeCalculation() { 
    //logic to change some UI 
} 
} 

,並檢查另一類:

public class AnotherClass extends Thread { 

MainActivity mainActivity; 

public AnotherClass (MainActivity mainActivity) { 
    // TODO Auto-generated constructor stub 

    this.mainActivity = mainActivity; 
} 

public void run() { 
    //write other logic 
     mainActivity.makeSomeCalculation(); 
    //write other logic 
} 
} 
0

您需要在您的活動中使用處理程序。當你的線程完成時,你然後發送一條消息給處理程序,通知線程執行完成。例如參見here。 你也可以使用這個接口。例如參見here。作爲回答,他使用界面來通知asyntask。你可以爲線程做同樣的事情。

0

這可能不是你在找什麼,於是認爲這是建議,以避免長期headaches.Try EventBus。這是一個在Android中的各種組件之間輕鬆交流的庫。

相關問題