0

私のタスクは実行され、最後のいくつかのサウンドまで正常に実行されます。いくつかの奇妙な理由で、それは強制的に閉じ続けます、私は見ました、そして見ました、そして理由がわかりません。音を取り除いて他のいくつかの手順を実行しましたが、サイズ制限などがあるのか​​わかりません。

それはそれがそれを行った2番目のプログラムです、何かアイデアはありますか?

MediaPlayer mp1, mp2, mp3, mp4, mp5, mp6, mp7, mp8, mp9, mp10, mp11, mp12,
    mp13, mp14, mp15, mp16, mp17, mp18, mp19, mp20, mp21, mp22, mp23, mp24, mp25, 
    mp26, mp27, mp28;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  //set up the button sound
    mp1 = MediaPlayer.create(this, R.raw.backtoyou);

    //button 1 coding 
    ImageButton Button1 = (ImageButton) findViewById (R.id.button01);
    Button1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            mp1.start();

        }
    });
    //longclick creates ringtone notification
    //Button1.setLongClickable(true);


    //set up the button sound
    mp2 = MediaPlayer.create(this, R.raw.blow);

    //button 1 coding 
    ImageButton Button2 = (ImageButton) findViewById (R.id.button02);
    Button2.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            mp2.start();

        }
    });

     //set up the button sound
    mp3 = MediaPlayer.create(this, R.raw.boomstick);

    //button 1 coding 
    ImageButton Button3 = (ImageButton) findViewById (R.id.button03);
    Button3.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            mp3.start();

        }
    });

    //set up the button sound
    mp4 = MediaPlayer.create(this, R.raw.byebye);

    //button 1 coding 
    ImageButton Button4 = (ImageButton) findViewById (R.id.button04);
    Button4.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            mp4.start();

        }
    });

....などなど。では、ファイルのエラーはどこにあり、なぜ強制的に閉じ続けるのでしょうか。

4

2 に答える 2

1

28MediaPlayer個のオブジェクトがあると、多くのメモリを消費しているのではないかと思います。MediaPlayerボタンが押されるたびに新しいサウンドで再初期化されるオブジェクトの使用を検討してください。この記事をチェックしてください:http://www.stealthcopter.com/blog/2010/08/android-soundpool-vs-mediaplayer-focus-on-soundboards-and-memory-problems/

于 2011-10-10T02:07:50.930 に答える
0

ええ、あなたは間違いなくFARが多すぎるMediaPlayerオブジェクトと冗長なコードを持っています。私が尋ねる質問は、音を重ねる必要があるかどうかです。サウンドボードの場合、私はそうは思わないでしょう(そして、もしあなたがそうしたら、それは厄介なUIの癖になると思います-私が何度も見たものです)。

この効果のために何かを試してください:

MediaPlayer player = new MediaPlayer();
Resources res = getResources();

//just keep them in the same order, e.g. button01 is tied to backtoyou
int[] buttonIds = { R.id.button01, R.id.button02, R.id.button03 /*etc...*/ };
int[] soundIds = { R.raw.backtoyou, R.raw.blow, R.raw.boomstick /*etc...*/ };

View.OnClickListener listener = new View.OnClickListener() {
    public void onClick(View v) {
        //find the index that matches the button's ID, and then reset
        //the MediaPlayer instance, set the data source to the corresponding
        //sound effect, prepare it, and start it playing.
        for(int i = 0; i < buttonIds.length; i++) {
            if(v.getId() == buttonIds[i]) {
                AssetFileDescriptor afd = res.openRawResourceFd(soundIds[i]);
                player.reset();
                player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                player.prepare();
                player.start();
                break;
            }
        }
    }
};

//set the same listener for every button ID, no need
//to keep a reference to every button
for(int i = 0; i < buttonIds.length; i++) {
    Button soundButton = (Button)findViewById(buttonIds[i]);
    soundButton.setOnClickListener(listener);
}
于 2011-10-10T03:43:19.487 に答える