意義

2016-03-21 13 views
1

我試圖理解這個代碼: 什麼我不明白的是意義

obj從 message.obj =結果;

由google api, 這是一個任意對象發送給收件人。 爲什麼我們在這個java [android]世界中使用任意對象?

class DownThread extends Thread { 
    String mAddr; 

    DownThread(String addr) { 
     mAddr = addr; 
    } 

    public void run() { 
     String result = DownloadHtml(mAddr); 
     Message message = mAfterDown.obtainMessage(); 
     message.obj = result; 
     mAfterDown.sendMessage(message); 

    } 

    String DownloadHtml(String addr) { 
     StringBuilder html = new StringBuilder(); 
     try { 
      URL url = new URL(addr); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      if (conn != null) { 
       conn.setConnectTimeout(10000); 
       conn.setUseCaches(false); 
       if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
        BufferedReader br = new BufferedReader(
          new InputStreamReader(conn.getInputStream()) 
        ); 
        for(;;) { 
         String line = br.readLine(); 
         if (line == null) break; 
         html.append(line + "/n"); 
        } 
        br.close(); 
       } 
       conn.disconnect(); 

      } 
     } catch (NetworkOnMainThreadException e){ 
      return e.getMessage(); 

     } catch (Exception e){ 
      return e.getMessage(); 
     } 
     return html.toString(); 
    } 

} 


Handler mAfterDown = new Handler() { 

    public void handleMessage(Message msg) { 
     mProgress.dismiss(); 
     TextView result = (TextView) findViewById(R.id.result); 
     result.setText((String) msg.obj); 

    } 

}; 

回答

0

document說:

的任意對象發送給收件人。

因爲Android並不確切知道Message中發送的對象類型。

在您的代碼中:message.obj = result;obj具有字符串類型。但在其他情況下,可能會分配其他類型的對象。

+0

謝謝你,你幫了我很多。 – bruno

0

Handler是用於在線程之間傳遞數據的機制。處理程序只會讓您安排消息對象或Runnables在處理Handler的線程上執行。

您不能發送任何舊對象到sendMessage(),因爲它只會接收消息類型的對象,所以它們使用Message中的obj字段來包含要發送的數據。