私はAndroidスタジオが新しく、簡単なアプリケーションを作成しようとしています。ボタンをクリックすると、ランダムイメージが表示されます。次は、すでに示されているものにすることはできません。シンプルなAndroid App - スマートフォンで実行中にメモリ不足エラーが発生する
私は2つのクラスを持っています。 MainActivityとRandomCardDrawです。
私はAVDエミュレータでアプリケーションを実行すると、クラッシュしません。しかし、時々私は情報を "スキップされたフレーム"を取得します。私は私のサムスンS6上でそれを実行するとき、私は2番目の画像を取得しようとするたびにアプリケーションがクラッシュします。 Androidでは、メモリ不足エラーが表示されます。
画像は100〜200kbの間にあり、私には約18個あります。
多分あなたはどこから私のperfomanceの問題を得ることができますか?
MainActivity:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
ImageView cardView;
Button nextCard;
RandomCardDraw2 game1 = new RandomCardDraw2();
int counter = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
game1.createRandomCardList();
gameStart();
}
public void gameStart()
{
cardView = (ImageView) findViewById(R.id.cardView);
nextCard = (Button) findViewById(R.id.nextCard);
nextCard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if (counter < 19)
{
int id = getResources().getIdentifier(game1.drawnCards.get(counter), "drawable", getPackageName());
cardView.setImageResource(id);
counter++;
}
}
});
}
}
そしてRandowmCardDraw:
import java.util.ArrayList;
import java.util.Random;
public class RandomCardDraw2
{
ArrayList<String> drawnCards = new ArrayList<>();
Random rndInt = new Random();
public void createRandomCardList()
{
boolean gameType = true;
int counter;
if (gameType == true)
{
counter = 19;
for (int i = 0; i < counter; i++)
{
String cardId = "card" + rndInt.nextInt(18 + 1);
drawnCards.add(cardId);
}
}
else
{
counter = 23;
for (int i = 0; i < counter; i++)
{
String cardId = "card" + rndInt.nextInt(18 + 1);
drawnCards.add(cardId);
}
}
}
}
アプリが開かれ
は、ここに私のコードです。カード付きArrayListはランダムに塗りつぶされます。ユーザーがボタンをクリックすると、次のカードが表示されます。私が言ったように、私のスマートフォンで、私は2番目の画像を取得したいときにアプリケーションがクラッシュします。
のErrorCode:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.kajet.shutupanddrink, PID: 18109
java.lang.OutOfMemoryError: Failed to allocate a 192000012 byte allocation with 16775360 free bytes and 69MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:856)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:675)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:2228)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:4215)
at android.content.res.Resources.loadDrawable(Resources.java:4089)
at android.content.res.Resources.getDrawable(Resources.java:2005)
at android.content.res.Resources.getDrawable(Resources.java:1987)
at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:133)
at android.content.Context.getDrawable(Context.java:464)
at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192)
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66)
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71)
at com.example.kajet.shutupanddrink.MainActivity$1.onClick(MainActivity.java:41)
at android.view.View.performClick(View.java:5702)
at android.widget.TextView.performClick(TextView.java:10888)
at android.view.View$PerformClick.run(View.java:22541)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
誰が助けることはできますか?
ありがとうございました!
あなたのスタックトレースを投稿してください...! – Shobhit
こんにちはshobhit、ヒントのおかげで。私はそれを編集し、私の質問にエラーコードを入れました。私はそれがあなたのstacktraceの意味であることを願っています! –
「画像は100〜200kbの間です」。彼らはどのようなイメージですか?彼らの決断は何ですか? – greenapps