它是不好的做法,呼籲你能安全地調用「getDrawable」或「decodeResource」在UI線程中的Android
getResources().getDrawable()
或BitmapFactory.decodeResource()
從Android的UI線程?我只是想知道,因爲我有這種情況,當我執行後臺操作時,我想在我的視圖中顯示一個調整圖像,但是我仍然調用以上任一方法...幾乎每個項目我都會執行任何線程上的任何方法都沒有第二想法,但我只是在尋找最佳實踐。
它是不好的做法,呼籲你能安全地調用「getDrawable」或「decodeResource」在UI線程中的Android
getResources().getDrawable()
或BitmapFactory.decodeResource()
從Android的UI線程?我只是想知道,因爲我有這種情況,當我執行後臺操作時,我想在我的視圖中顯示一個調整圖像,但是我仍然調用以上任一方法...幾乎每個項目我都會執行任何線程上的任何方法都沒有第二想法,但我只是在尋找最佳實踐。
如果您在UI線程上執行任何GUI更新,這將是一種很好的做法。在任何線程內,你都可以運行你的UI線程,在那裏你可以做UI的東西,否則你可以去消息處理程序也可以爲你做同樣的事情。
Runnable run_in_ui = new Runnable() {
@Override
public void run() {
// do your UI stuffs here
}
};
runOnUiThread(run_in_ui);
快進3年以來我問這個問題,我覺得短的答案是「只要用畢加索或滑翔」。我認爲長答案是「這取決於」。它取決於圖像/繪圖的大小。對於BitmapFactory#decodeResource
,您應該盡一切所能保持主線程不變。如果我試圖展示佔位符圖像,最佳做法是應該將它包裝在您的應用中,並且尺寸合理,並與您的設計相符。
即使Vijay Sharma建議使用畢加索,我建議你使用Facebook上的frescolib。它從硬件緩存開始進行所有可能的優化,最終通過流水線概念修改Http請求。
而是做你自己的,最好是依靠Facebook的團隊的工作:
的build.gradle:
dependencies {
// your app's other dependencies
compile 'com.facebook.fresco:fresco:0.7.0+'
}
view.xml用:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp"
android:layout_height="wrap_content"
fresco:viewAspectRatio="1.33"
<!-- other attributes -->
的java:
mSimpleDraweeView.setImageURI(uri);
T帽子簡單!
是的,壁畫也。我只是想表達一下,我認爲使用圖書館和自己做這件事是最好的選擇。 – 2015-10-07 23:41:46
是的,我知道它的最佳實踐來更新UI線程上的UI組件。我更感興趣知道getDrawable()和decodeResource()在UI線程上是否被認爲是「I/O」?或者如果他們應該始終在工作線程上完成? – 2012-07-20 18:45:39