在图像视图中循环显示图像

纽基德

我在sd卡上的应用程序中有一些图像,我想在一段时间内将这些图像逐一显示给用户,可以说这样一幅图像然后一分钟后再显示另一幅,然后再像一分钟后再显示一幅。我想在一个位图中转换图像并显示它。我想以连续循环的方式显示这些图像,直到用户从应用程序中存在为止,该应用程序应该逐个显示图像,我正在使用以下代码:

     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

还有更多这样的事情

叶夫根尼·辛金(Yevgeny Simkin)

当您使用for循环时,它将尝试尽可能快地执行它所要执行的操作。新的Showtime()。execute()并不是阻塞调用,因此,基本上,您是在生成数以千计的线程中加载图像并非常快地耗尽内存。

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

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

另外,在没有看到堆栈跟踪的情况下,不可能知道您可能在做错什么,但是我认为您正在正确地加载位图(您很可能不是)是理所当然的。

[EDIT]您实际上不需要异步任务。您可以在执行postDelayed的可运行对象中执行以下操作:

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
   }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章