可运行已成功发布但未运行
在现有的Android项目中,我遇到了以下代码片段(我在其中插入了调试垃圾)
ImageView img = null;
public void onCreate(...) {
img = (ImageView)findViewById(R.id.image);
new Thread() {
public void run() {
final Bitmap bmp = BitmapFactory.decodeFile("/sdcard/someImage.jpg");
System.out.println("bitmap: "+bmp.toString()+" img: "+img.toString());
if ( !img.post(new Runnable() {
public void run() {
System.out.println("setting bitmap...");
img.setImageBitmap(bmp);
System.out.println("bitmap set.");
}
}) ) System.out.println("Runnable won't run!");
System.out.println("runnable posted");
}
}.start();
Android开发的新手,并且已经搜索过,我知道这是在不阻塞主(UI)线程的情况下完成工作的方法,同时在解码后仍然在UI线程上设置图像。(至少根据Android开发人员)(我已经通过在各个地方登录来验证)Thread.currentThread().getName()
现在有时图像只是没有显示出来,stdout只说
I/System.out( 8066): bitmap: android.graphics.Bitmap@432f3ee8 img: android.widget.ImageView@4339d698
I/System.out( 8066): runnable posted
没有来自Runnable的消息的跟踪。所以看起来Runnable没有,尽管返回。将 ImageView 拉入并声明它没有帮助。run()
img.post()
true
onCreate()
final
我无能为力。只需直接设置位图,同时阻止 UI 线程,就可以解决问题,但我想把事情做好。有人明白这是怎么回事吗?
(ps. 这一切都是在 Android 1.6 手机和 android-3 sdk 上观察到的)