我在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
还有更多这样的事情
当您使用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] 删除。
我来说两句