Android应用程序崩溃了,我不知道为什么
我有一只很奇怪的虫子。它只在模拟器中发生。我在多部安卓手机和Acer平板电脑上进行了测试,效果很好 我的程序有一个循环,可以将位图加载到Android应用程序崩溃了,我不知道为什么,android,Android,我有一只很奇怪的虫子。它只在模拟器中发生。我在多部安卓手机和Acer平板电脑上进行了测试,效果很好 我的程序有一个循环,可以将位图加载到位图[]位卡中。通过bitCards=new Bitmap[14]为14个元素设置数组 现在它循环12次,将位图放入数组,如下所示: bitCards[i] = BitmapFactory.decodeStream(inputStream); 当i=8时,该语句崩溃 如果我用 bitCards[0] = BitmapFactory.decodeStream(i
位图[]位卡中。通过bitCards=new Bitmap[14]
为14个元素设置数组
现在它循环12次,将位图放入数组,如下所示:
bitCards[i] = BitmapFactory.decodeStream(inputStream);
当i=8时,该语句崩溃
如果我用
bitCards[0] = BitmapFactory.decodeStream(inputStream);
它没有崩溃,我想可能是阵列不够大,所以我做了以下操作
bitCards[8]=BitmapFactory.decodeStream(inputStream); // Still did not crash.
唯一有意义的是当我
bitCards[i] = BitmapFactory.decodeStream(inputStream);
它是放松旧的记忆并放入一个新的对象,因此只为一个对象创建了内存,但是。。。。异常不会消失,我不应该得到某种错误吗
这是我的全部代码:
void Shuffle()
{
Random generator;
generator = new Random();
int[] iCardsUsed;
iCardsUsed = new int[55];
for(int i=0;i<55;i++)
iCardsUsed[i]=0;
try {
bitCards = new Bitmap[14];
iCards = new int[14];
iTurnOver = new int[14];
for (int i = 0; i < 12; i++)
{
iTurnOver[i]=0;
int cardId;
do {
cardId = generator.nextInt(50);
} while( iCardsUsed[cardId] ==1);
iCardsUsed[cardId] =1;
iCards[i]=cardId;
iCards[i]=i;
String fName=new String("card");
fName+=Integer.toString(iCards[i]+1);
fName+=".jpg";
AssetManager assetManager= ctx.getAssets();
InputStream inputStream;
inputStream = assetManager.open(fName);
// this is where it crashes
bitCards[i]=BitmapFactory.decodeStream(inputStream);
inputStream.close();
}
} catch( IOException e)
{
gi++;
}
// update screen
invalidate();
}
void Shuffle()
{
随机发生器;
生成器=新随机数();
int[]i已使用;
iCardsUsed=新整数[55];
对于(int i=0;i,因为您没有提供错误消息,所以我在黑暗中拍摄,并假设它正在运行
您说它在运行几次后停止(当i=8时),我相信您没有释放资源。位图有时可能会占用大量空间,如果您将它们持久保存在内存中,如果设备内存不足,我也不会感到惊讶。不同的设备具有不同的内存规格,运行几次后,它会填满内存
因此,我的建议是使用mBitmap.recycle()
另外,请查看!您能提供错误消息吗?请提供logcat信息。