在循环中的imageview中显示图像

时间:2013-09-04 06:15:05

标签: android android-asynctask

我在sd卡上的应用程序中有一些图像,我想在一段时间内逐个向用户显示这些图像,让我们说一张图像,然后是一分钟后的另一张图像,然后是一分钟后的另一张图像。我是使用aysnctask为此我在一个位图中转换图像并显示它。我想在连续循环中显示这些图像,直到用户从应用程序存在应用程序应该逐个显示图像我正在使用以下代码: -

     for(i=1;i<z-1;i++)
     {  
    xc=cont_id.get(1).toString();
     what=Environment.getExternalStorageDirectory() + "/Playerimages/" + xc + ".jpg";
     play_duration=durat.get(1);
     //s1.execute(what,play_duration);
      new Showtime().execute(what,play_duration);
      Log.i("lenght",String.valueOf(i));}

但是当我尝试在无限循环中执行它时,我的应用程序崩溃了: -

   for(i=1;i<z-1;i++)
  {

    xc=cont_id.get(1).toString();
    what=Environment.getExternalStorageDirectory() + "/Playerimages/" + xc + ".jpg";
    play_duration=durat.get(1);
  //s1.execute(what,play_duration);
  new Showtime().execute(what,play_duration);
   Log.i("lenght",String.valueOf(i));
      if(i=Z-1){
        i=1;
         }}

我的应用程序崩溃请有人建议我如何实现它.. 现在我的应用程序没有崩溃,但它没有显示我的logcat在下面的任何图像

  09-04 12:11:31.807: I/dalvikvm-heap(4358): Clamp target GC heap from 48.002MB to 48.000MB
09-04 12:11:31.807: I/dalvikvm-heap(4358): Grow heap (frag case) to 48.000MB for 80-byte allocation
09-04 12:11:32.182: I/dalvikvm-heap(4358): Clamp target GC heap from 50.002MB to 48.000MB
 09-04 12:11:32.182: D/dalvikvm(4358): GC_FOR_ALLOC freed 0K, 2% free 48571K/49159K, paused 372ms, total 372ms
  09-04 12:11:32.182: I/dalvikvm-heap(4358): Clamp target GC heap from 48.002MB to 48.000MB
  09-04 12:11:32.182: I/dalvikvm-heap(4358): Grow heap (frag case) to 48.000MB for 20-byte allocation
  09-04 12:11:32.182: D/dalvikvm(4358): WAIT_FOR_CONCURRENT_GC blocked 8390ms
  09-04 12:11:32.557: I/dalvikvm-heap(4358): Clamp target GC heap from 50.002MB to 48.000MB
  09-04 12:11:32.557: D/dalvikvm(4358): GC_FOR_ALLOC freed 0K, 2% free 48571K/49159K, paused 380ms, total 380ms
  09-04 12:11:32.557: I/dalvikvm-heap(4358): Clamp target GC heap from 48.002MB to 48.000MB
  09-04 12:11:32.557: I/dalvikvm-heap(4358): Grow heap (frag case) to 48.000MB for 12-byte allocation
  09-04 12:11:32.932: I/dalvikvm-heap(4358): Clamp target GC heap from 50.002MB to 48.000MB
   09-04 12:11:32.932: D/dalvikvm(4358): GC_CONCURRENT freed 0K, 2% free 48571K/49159K, paused 2ms+3ms, total 371ms
  09-04 12:11:32.932: D/dalvikvm(4358): WAIT_FOR_CONCURRENT_GC blocked 369ms
  09-04 12:11:33.292: I/dalvikvm-heap(4358): Clamp target GC heap from 50.002MB to 48.000MB
  09-04 12:11:33.292: D/dalvikvm(4358): GC_FOR_ALLOC freed 0K, 2% free 48571K/49159K, paused 362ms, total 362ms
  09-04 12:11:33.292: I/dalvikvm-heap(4358): Clamp target GC heap from 48.002MB to 48.000MB
  09-04 12:11:33.292: I/dalvikvm-heap(4358): Grow heap (frag case) to 48.000MB for 110-byte allocation
  09-04 12:11:33.659: I/dalvikvm-heap(4358): Clamp target GC heap from 50.002MB to 48.000MB
   09-04 12:11:33.659: D/dalvikvm(4358): GC_FOR_ALLOC freed <1K, 2% free 48571K/49159K, paused 362ms, total 362ms
  09-04 12:11:33.659: I/dalvikvm-heap(4358): Clamp target GC heap from 48.002MB to 48.000MB
   09-04 12:11:33.659: I/dalvikvm-heap(4358): Grow heap (frag case) to 48.000MB for 24-byte allocation
  09-04 12:11:34.026: I/dalvikvm-heap(4358): Clamp target GC heap from 50.002MB to 48.000MB
  09-04 12:11:34.026: D/dalvikvm(4358): GC_FOR_ALLOC freed <1K, 2% free 48571K/49159K, paused 368ms, total 368ms
   09-04 12:11:34.026: I/dalvikvm-heap(4358): Clamp target GC heap from 48.002MB to 48.000MB

更像是这样

2 个答案:

答案 0 :(得分:0)

本准则可能会对您有所帮助

https://code.google.com/p/android-slideshow/

在Google代码链接中,选中标记为“来源”的标签,然后使用subversion将代码输出到存储库中。

并使用它来获取文件路径。

String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+file_name

答案 1 :(得分:0)

当你使用for循环时,它会尝试尽可能快地做你正在做的事情。新的Showtime()。execute()不是一个阻塞调用,所以,你基本上会产生成千上万的线程加载图像并且很快耗尽内存。

所以......假设Showtime是您的AsyncTask,您希望在该任务完成时触发图像显示的下一次迭代。

删除for()循环,只需使用Task作为显示图像的调度程序,然后等待,然后显示下一个。

此外,如果没有看到你的堆栈跟踪,就不可能知道你可能做错了什么,但我理所当然地认为你正在正确加载你的位图(你很可能不会这样)。

[编辑] 您实际上不需要Async任务。你可以在像这样执行postDelayed的runnable中执行此操作:

public void onCreate(Bundle b){
    super.onCreate(b);

    //load your Layout


    //start your image rotator
    new Handler().post(showNextImage);

}


Runnable showNextImage = new Runnable(){
   public void run(){
        //draw your next image here


        //now schedule your next image
        new Handler().postDelayed(showNextImage, 60000);// show next image in a minute
   }

}