2011-01-28 39 views

回答

1

看一看在AsyncTask類可以幫助你在另一個線程比UI線程處理的工作。這是一個非常有用的Android框架類。

您只需創建一個繼承自AsyncTask的自定義類,然後覆蓋doInBackground()並插入應在其自己的線程中執行的代碼。在你的情況下,這將是執行下載的代碼。此外,您必須覆蓋在doInBackground()方法完成時自動調用的onPostExecute()。您在doInBackground()方法中返回的對象將自動傳遞給onPostExecute()方法。 onPostExecute()將在UI線程上執行。

所以AsyncTask類將爲你處理所有線程的東西,你可以專注於你的工作。請參閱tutorial on the Android Developer site

0

不用創建線程,創建一個Callable並通過submit()方法的方式將其傳遞給一個ExecutorService

Future<T> submit(Callable<T> task) 

提交Callable對象到ExecutorService回報Future對象。 Futureget()方法將阻塞,直到任務完成並將包含Callable的結果。

例子:

Callable<String> callable = new Callable<String>(){ 
     @Override 
     public String call() throws Exception { 
      return "HELLO WORLD"; 
     } 
    }; 

    //executor with one thread 
    ExecutorService executor = Executors.newSingleThreadExecutor(); 

    Future<String> future = executor.submit(callable); 
    executor.shutdown(); 
    String result = future.get(); 
    System.out.println(result); 
+0

謝謝...但如何使它在兩個類?實施Callable 。如何從主類獲得訪問權限? – user547995 2011-01-28 08:58:19

1

如果 「主類」 你的意思是你Activity那麼你可以使用一個Handler

在你的活動:

private static final int DOWNLOAD_COMPLETE = 0; 
... 

private Handler handler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     switch(msg.what){ 
     case DOWNLOAD_COMPLETE: 
      Log.d("MYTAG",msg.obj.toString()); 
      break; 
     } 
    } 
} 

而在一些其他類:

public doBackgroundUpdate(Handler handler){ 
    Thread backgroundThread = new Thread() { 
     @Override 
     public void run() { 
      // do long-running post operation 

      // send result back to UI thread 
      Message msg = Message.obtain(); 
      msg.what = DOWNLOAD_COMPLETE; 
      msg.obj = "Result String to pass"; 
      handler.sendMessage(msg); 
     } 
    } 
    backgroundThread.start(); 
}