大きなリストビューがあります。各リストビュー項目には再生ボタン(画像)があります。その再生ボタンをクリックすると、小さなオーディオファイルが再生されます。MediaPlayerオブジェクトを使用して多数のオーディオファイルをAndroidで再生できません
私は、リストビューで要素をロードするためのアダプタを作成し、再生時にonClickリスナーを実装しました。
アプリケーションを起動すると、リストが正しく読み込まれていますが、オーディオに問題があります。私が(10-12のような)アイテムを何度も(100のように)何度も演奏すると、問題は発生しません。すべてがスムーズに実行されます。
しかし、私がリスト内の30-40個のアイテムのように多くのアイテムをプレイした場合、後の項目のオーディオファイルのロードを停止します。アイテムについては、機能していない新しいアイテムについては機能し続けました。
public class WordListAdapter extends BaseAdapter{
private ArrayList<Word> wordArrayList;
private Activity activity;
private static LayoutInflater inflater=null;
MediaPlayer mp;
public WordListAdapter(Activity activity, ArrayList<Word> wordArrayList) {
this.activity = activity;
this.wordArrayList = wordArrayList;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return wordArrayList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
View view = convertView;
if(convertView == null) {
view = inflater.inflate(R.layout.item_word, null);
}
TextView word1 = (TextView) view.findViewById(R.id.word1);
TextView word2 = (TextView) view.findViewById(R.id.word2);
ImageView imageWord = (ImageView) view.findViewById(R.id.imageWord);
ImageView playWord = (ImageView) view.findViewById(R.id.playWord);
word1.setText(wordArrayList.get(position).lang1);
word2.setText(wordArrayList.get(position).lang2);
if(wordArrayList.get(position).pic == 0) {
imageWord.setVisibility(GONE);
}
else {
imageWord.setImageResource(wordArrayList.get(position).pic);
}
playWord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp = MediaPlayer.create(activity, wordArrayList.get(position).audio);
mp.start();
}
});
return view;
}
}
私はあまりにも多くのメディアプレーヤーオブジェクトを作成しているため、問題があると思います。
どのように修正するのですか?
携帯電話のストレージやストリーミングからオーディオを再生していますか? –
電話から。 'MediaPlayer.create(activity、wordArrayList.get(position).audio)' リソースからオーディオファイルをロードしています。 –
すべてのオーディオファイル(約100)がリソースにあります。 –