2011-01-16 4 views
0

나는 음악을 만든 app.the 응용 프로그램은 btns.the 응용 프로그램이 문제없이 실행 (16) 음악을 가지고 있지만 난 .. 아래 응용 프로그램의 힘앱의 힘은 아래로 suddently

 super.onCreate(icicle); 
     setContentView(R.layout.main); 
     int[] ids = {R.id.btn,R.id.btn2, R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9, R.id.btn10, 
       R.id.btn11, R.id.btn12, R.id.btn13, R.id.btn14, R.id.btn15, R.id.btn16 }; 



      for (int i : ids) { 
       b = (Button) findViewById(i); 
       b.setOnClickListener(this); 
      }} 
     //outside of onCreate() 
     @Override 
     public void onClick(View v) { 

      switch(v.getId()) { 
       case R.id.btn: 
        if (mp != null && mp.isPlaying()) mp.stop(); 
        mp = MediaPlayer.create(zoo.this, R.raw.gata); 
        mp.start(); 
        break; 

이 여러 번 btns를 누를 때 코드 및 모든 btn에 대 한 사례를 사용합니다. 응용 프로그램이 강제로 중단 될 때 logCat은 mp.start()에서 NullPointerException을 찾습니다. 아래로 응용 프로그램을 강제로 버튼 ..의 도움을 보라! 나는 포인트가 MediaPlayer를 꽤 무거운 무게 자원이며, 당신이 그들을 너무 많이 생성 안된다는 생각

case R.id.btn: 
    if (mp != null && mp.isPlaying()) mp.stop(); 
    mp.reset(); 
    try { 
     mp.setDataSource("zoo.this,R.raw.gata"); 
    } catch (IllegalArgumentException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IllegalStateException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    mp.start(); 
    break; 
+1

버튼을 누를 때마다 새로운 'MediaPlayer'를 만드시겠습니까? 클래스는 이유 때문에'reset()'과'setDataSource()'메소드를 가지고있다. –

+0

죄송합니다, 안드로이드 개발에 새로운입니다! 어떻게 해결할 수 있습니까? –

+2

[MediaPlayer] (http://developer.android.com/reference/android/media/MediaPlayer.html) 클래스에 대한 설명서를 살펴보십시오. –

답변

0

: 아래의 코멘트에서

편집 할 수 있습니다. 또한 작업이 끝나면 release() 메서드라고 부릅니다. Anon의 요점은 둘 다 유효합니다. 새 미디어를 만드는 대신 미디어 재생을 재사용해야하며 MediaPlayer 설명서를 잘 알고 있어야합니다. MediaPlayer를 문서에서 예를 들어 :

자원이 MediaPlayer를 소프트웨어 구현 또는 실패에 대체에 객체의 같은 호 해제()에 하드웨어 가속 구성 요소 실패로 자원 후속 경우 발생할 수 있습니다 싱글을 포함 할 수있다 전부.

가설은 많은 MediaPlayer 개체를 할당하고 있거나 충분히 빨리 릴리스하지 않는다는 것입니다. 그러나 더 많은 코드가 없으면 확신 할 수 없습니다.

+0

답장을 보내 주셔서 감사하지만 어떻게 해결할 수 있습니까? –