2012-07-18 116 views
0

內加載網頁的圖像,我需要從網上獲得的圖像,並在我的應用程序的主要活動顯示。我試圖把它放在一個單獨的線程內,用下面的代碼(它會在onCreate方法中):安卓:從一個單獨的線程

 Thread trd = new Thread(new Runnable(){ 
      @Override 
      public void run(){ 
       ImageView iv1 = (ImageView) findViewById(R.id.promo); 
       try{ 
        URL url = new URL("http://www.domain.com/image.jpg"); 
        InputStream content = (InputStream)url.getContent(); 
        Drawable d = Drawable.createFromStream(content, "src"); 
        iv1.setImageDrawable(d); 
       } 
       catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     }); 
     trd.run(); 

此代碼工作正常,更新與我從網絡上獲得的圖像用戶界面。

問題

  1. 聽說的Android只允許你修改從主UI線程的用戶界面,但它看起來與我類似的代碼,我從一個單獨的線程裏面做。怎麼來的?我應該擔心我的代碼可能因爲某種原因而中斷嗎?

  2. 是上面的代碼效率,以確保在等待Web圖像我的應用程序UI不會凍結被檢索?

回答

1
I heard that Android only allows you to modify the UI from the main UI thread, but it looks like with my code I am doing it from inside a separate thread. How come? Should I be worried my code might break for some reason? 

是的,你是從一個單獨的線程修改。

設置繪製一個線程裏面使用,並d最後的回答。

SampleActivity.this.runOnUiThread(new Runnable() { 

        public void run() { 
         iv1.setImageDrawable(d); 

        } 
       }); 

Is the above code efficient to make sure my app UI will not freeze while waiting for the web image to be retrieved?

沒有,因爲它不會運行在所有。並會通過Exception

+0

但我的代碼,目前工作正常,這就是爲什麼我很好奇。 – 2012-07-18 18:57:02

+0

你清楚你的代碼失蹤something..look again..btw你可以看到IV1新形象?我覺得這樣不好。並可能是你的'應用程序'不會崩潰。當你趕上'Exception'..a很不好,感染最糟糕的事情在作弄我趕上一般'Exception' – 2012-07-18 19:01:43

+0

我不知道發生了什麼事情,但是,是的代碼工作正常,我這樣做可以看到圖像。但我會進一步調查,因爲我認爲你是對的。 – 2012-07-18 19:03:21