无法基于thread.sleep执行循环

时间:2011-11-09 06:22:05

标签: android

我正在尝试以幻灯片形式显示sdcard中特定文件夹中的一系列图像。 filelist [] 包含该目录中存在的所有文件的名称。

我在这里过滤掉了这些图片。接下来,thread.sleep(1000)似乎没有任何效果。在1000ms的时间之后,仅显示目录中的最后一个图像。我哪里错了?我能用其他任何方式完成这个任务吗?

也许我完全错了。我是新手,所以请帮忙。

public class List_imgActivity extends Activity {
 /** Called when the activity is first created. */

Bitmap[] bitmapArray = new Bitmap[1000];

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button pf=(Button) findViewById(R.id.pick_button);

    pf.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Intent intent = new Intent("org.openintents.action.PICK_DIRECTORY");

            intent.setData(Uri.parse("file:///sdcard"));
            intent.putExtra("org.openintents.extra.TITLE", "Please select a folder");
            intent.putExtra("org.openintents.extra.BUTTON_TEXT", "Use this folder");
            startActivityForResult(intent, 1);

        }

        });

    }
protected void onActivityResult(int requestCode, int recievecode, Intent intent)
{

    if (requestCode == 1 )

   {
      Uri uri = intent.getData();

      try {
        File f=new File(new URI(uri.toString()));
        final String nx=f.toString();

        if(f.isDirectory()) {

            File filelist[] = f.listFiles();




        for(int i=0;i<filelist.length;i++) 
        {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {

        e.printStackTrace();
    }
        String filename = filelist[i].getName(); 
        int pos = filename.lastIndexOf(".");
        String ext = filename.substring(pos);


        if(ext.equals(".jpg"))
        {
            TextView tv1= (TextView) findViewById(R.id.textView1);
            tv1.setText(filelist[i].toString());


            ImageView iv1=(ImageView) findViewById(R.id.imageView1);





        bitmapArray[i] =  BitmapFactory.decodeFile(filelist[i].toString());

        iv1.setImageBitmap(bitmapArray[i]);


        }

        }


        }



    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }





   }

   } 

}

2 个答案:

答案 0 :(得分:1)

在这样的Android行为中,会让UI-Thread进入睡眠状态。这将冻结手机的整个用户界面,你的应用程序看起来会崩溃给用户,系统会在一段时间后自动终止你的应用程序。

有一种机制可以在特定时间间隔内更改内容。您应该使用此处理程序来执行此操作。 Handlers

处理程序具有postDelayedsendMessageDelayed方法,允许您构建将在特定时间之后执行的Runnable,或者发送必须由处理程序的实现处理的消息。

处理程序的初始化看起来像这样:

showNextImageHandler = new Handler() {  
   @Override
   public void handleMessage(android.os.Message msg) {
      showNextImage();
   }
};

showNextImageHandler.sendMessageDelayed(showNextImageHandler.obtainMessage(), 1000);

此代码创建一个新的处理程序,每次收到消息时都会调用showNextImage函数。我会将Handler存储在您活动的实例变量中,以便稍后发送更多消息。创建处理程序后,将以一种延迟发送消息1000毫秒的方式发送第一个空消息。一秒钟后,将调用showNextImage函数。在此功能中,您可以更改视图,如果存在下一个图像,您可以发布另一个延迟消息,以便稍后再触发该功能。

答案 1 :(得分:0)

U必须在应用Thread.sleep()方法

之前同步当前对象