我想提出兩個的Runnable我的Android應用程序的工作:執行兩個的Runnable的Android
1)可運行R1爲改變ImageView的:
Runnable r1 = new Runnable() {
@Override
public void run() {
albumpic.setImageResource(pub[i]);
i++;
if(i >= pub.length) {
i = 0;
}
albumpic.postDelayed(this, 3000);
}
};
albumpic.postDelayed(r1, 3000);
2)可運行R2改變一個TextView:
Runnable r2 = new Runnable(){
@Override
public void run(){
out = "Title: " + retriever.extractMetadata(ShoutCastMetadataRetriever.METADATA_KEY_TITLE) + " \nArtist: " + retriever.extractMetadata(ShoutCastMetadataRetriever.METADATA_KEY_ARTIST);
title.setText(out);
title.postDelayed(this, 3000);
}
};
title.postDelayed(r2, 3000);
當我只運行其中一個工作正常,但是當我嘗試運行他們兩個他們不工作。
我該如何讓他們同時工作?
謝謝!
更新:我試圖用這樣的ThreadPoolExecutor的:
Runnable r1 = new Runnable() {
@Override
public void run() {
albumpic.setImageResource(pub[i]);
i++;
if(i >= pub.length) {
i = 0;
}
albumpic.postDelayed(this, 3000);
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
out = "Title: " + retriever.extractMetadata(ShoutCastMetadataRetriever.METADATA_KEY_TITLE) + " \nArtist: " + retriever.extractMetadata(ShoutCastMetadataRetriever.METADATA_KEY_ARTIST);
title.setText(out);
title.postDelayed(this, 3000);
}
};
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
executor.execute(r1);
executor.execute(r2);
它給了我這些錯誤:
05-15 11:56:35.695: E/AndroidRuntime(11437): FATAL EXCEPTION: pool-2-thread-2
05-15 11:56:35.695: E/AndroidRuntime(11437): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.ViewRoot.checkThread(ViewRoot.java:3090)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.ViewRoot.requestLayout(ViewRoot.java:666)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.View.requestLayout(View.java:8391)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.View.requestLayout(View.java:8391)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.View.requestLayout(View.java:8391)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.View.requestLayout(View.java:8391)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:257)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.view.View.requestLayout(View.java:8391)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.widget.TextView.checkForRelayout(TextView.java:5880)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.widget.TextView.setText(TextView.java:2888)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.widget.TextView.setText(TextView.java:2749)
05-15 11:56:35.695: E/AndroidRuntime(11437): at android.widget.TextView.setText(TextView.java:2718)
05-15 11:56:35.695: E/AndroidRuntime(11437): at com.adventure.agadir.MainActivity$11.run(MainActivity.java:241)
05-15 11:56:35.695: E/AndroidRuntime(11437): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
05-15 11:56:35.695: E/AndroidRuntime(11437): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
05-15 11:56:35.695: E/AndroidRuntime(11437): at java.lang.Thread.run(Thread.java:1019)
什麼是「不工作」。意思是 – Blackbelt
他們都應該完成預期的任務 Runnable「r1」應該每3秒更換一次圖片,而Runnable「r2」應該每3秒更換一次標題(TextView)。 當我運行它們時,ImageView Runnable是唯一可用的。 – user1885868
任何崩潰錯誤? – Raghunandan