노무현 전 대통령 서거 추모글 남기기

soundpool을 과 MediaPlayer 비교:
기본적으로 둘 다 소리를 재생할 수 있다는 측면에서는 같지만,
MediaPlayer는 하나의 미디어 파일을 재생하는 용도로 주로 사용됩니다. 즉, 노래나 영화를 재생시키고 특정 위치로 seeking하고 pause하고 play하는 등의 플레이어를 구현해 놓은 것이라 보시면 됩니다.
SoundPool 은 mp3, ogg등으로 만들어진 리소스를 16bit PCM으로 디코딩해서 들고 있다가 재생하므로 CPU사용량을 줄이고, 여러개의 스트림을 로드해 두었다가 동시에 정해진 개수만큼 재생한다거나 하는 등의 관리 기능을 가지고 있습니다. 주로, 게임 등에서 폭발음, 클릭음 등을 로드해서 들고 있다가 재생하는 용도로 사용됩니다.

출처: http://www.androidpub.com/9707
Posted by Kelly Cook
,

http://www.imbc.com/broad/radio/minimbc/app/index.html

MBC mini Radio를 사용해 봤습니다. MBC 뉴스도 그렇고 MBC는 다른 방송사에 비해서 디자인이 알록달록 이쁘네요.방송도 잘 나오는 편입니다. 다만 친친 디제이가.. ㅠㅠ 태연의 친한친구 다시 들을 날이 빨리 왔으면 좋겠네요..


근데 종료시에 문제가좀 있네요..

종료하면 종료, 숨기기, 취소 팝업이 뜨고 종료를 누르면 종료가 되는데, 소리는 한 1초가량 후에 종료 됩니다.

뭐 그건 그렇다쳐도 종료 후에 계속 서버에 접속하는 것 같네요.. 방송은 아니고 선곡표 같은거 계속 접속하네요.

혹시나 해서 Wifi, 3G 끄니까 접속이 안된다는거 보니까 계속 서버에 접속하는 듯..

하여튼 백그라운드에 남아서 뭔가를 합니다. Wifi는 무료라지만 3G 무한 아니신 분들은 참고하세요.


전 넥서스 원 가지고 있는데 3G로 테스트하니 미세하게 전송량이 늘어나는 단점이 있네요..

그리고 가끔 걍 죽어버립니다. 디버그보면 뻘건글씨가.. 근데 디버그에 뭔 정보를 노출시키나요..

하여튼 원래 에러나면 팝업 생성되는데, 그거 걍 없애고 소리소문 없이 죽습니다.

MBC News 어플도 페이지 막 돌아다니다 보면 Bitmap size error 나서 죽던데, 이때도 팝업 없이 조용히..

하여튼 보이는 것은 깔끔하고 잘되는 것같은데, 안보이는 곳에 처리가 미숙한 점은 좀 아쉽습니다.

그래도 일반 사용자들에게는 최고의 프로그램이 나리까 합니다. 문제점이 사용하는데 크게 지장을 줄 정도도 아니고, 안들이드 폰으로 자기가 원하는 프로그램도 들을 수 있고..

Posted by Kelly Cook
,
출처: http://blog.naver.com/anwun?Redirect=Log&logNo=113823272

mm_MPTest
 

public class mm_MPTest extends Activity {

     MediaPlayer mPlayer;

 

     public void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.mm_mptest);

 

          // 리소스 재생

          findViewById(R.id.btn1).setOnClickListener(new Button.OnClickListener() {

              public void onClick(View v) {

                   MediaPlayer player = MediaPlayer.create(mm_MPTest.this, R.raw.dingdong);

                   player.start();

              }

          });

 

          // 파일 재생

          findViewById(R.id.btn2).setOnClickListener(new Button.OnClickListener() {

              public void onClick(View v) {

                   MediaPlayer player = new MediaPlayer();

                   try {

                        player.setDataSource("/sdcard/eagle5.mp3");

                        player.prepare();

                        player.start();

                   } catch (Exception e) {

                        Toast.makeText(mm_MPTest.this, "error : " + e.getMessage(), 0).show();

                   }

              }

          });

 

          // 스트림 재생

          findViewById(R.id.btn3).setOnClickListener(new Button.OnClickListener() {

              public void onClick(View v) {

                   MediaPlayer player = new MediaPlayer();

                   try {

                        Uri uri = Uri.parse("http://www.winapi.co.kr/data/saemaul1.mp3");

                        player.setDataSource(mm_MPTest.this, uri);

                        player.prepare();

                        player.start();

                   } catch (Exception e) {

                        Toast.makeText(mm_MPTest.this, "error : " + e.getMessage(), 0).show();

                   }

              }

          });

 

          // 미리 준비된 객체로 재생

          mPlayer = MediaPlayer.create(this, R.raw.dingdong);

          findViewById(R.id.btn4).setOnClickListener(new Button.OnClickListener() {

              public void onClick(View v) {

                   mPlayer.seekTo(0);

                   mPlayer.start();

              }

          });

 

          // 준비하지 않은 상태로 재생

          findViewById(R.id.btn5).setOnClickListener(new Button.OnClickListener() {

              public void onClick(View v) {

                   MediaPlayer player = new MediaPlayer();

                   try {

                        player.setDataSource("/sdcard/eagle5.mp3");

                        player.start();

                   } catch (Exception e) {

                        Toast.makeText(mm_MPTest.this, "error : " + e.getMessage(), 0).show();

                   }

              }

          });

 

          // 다른 파일 열기

          findViewById(R.id.btn6).setOnClickListener(new Button.OnClickListener() {

              public void onClick(View v) {

                   MediaPlayer player = MediaPlayer.create(mm_MPTest.this, R.raw.dingdong);

                   //player.reset();

                   try {

                        player.setDataSource("/sdcard/eagle5.mp3");

                        player.prepare();

                        player.start();

                   } catch (IllegalArgumentException e) {

                        Toast.makeText(mm_MPTest.this, "IllegalArgumentException", 0).show();

                   } catch (IllegalStateException e) {

                        Toast.makeText(mm_MPTest.this, "IllegalStateException", 0).show();

                   } catch (IOException e) {

                        Toast.makeText(mm_MPTest.this, "IOException", 0).show();

                   }

              }

          });

     }

 

     public void onDestroy() {

        super.onDestroy();

        if (mPlayer != null) {

          mPlayer.release();

          mPlayer = null;

        }

    }

}

Posted by Kelly Cook
,
id: 회색회색
(추천: 1 / 0)
onDestory 를 절대로 강제적으로 호출하시지는 말아주시기 바랍니다. Activity위에 또 Activity를 뛰우는 등의 작업을 하실때 이전 Activity에서 사용하던 Animation등의 큰 리소스를 정리하시려면. onPause와 onResume에서 처리를 해주시는 것도 좋을 듯 합니다.

Java는 따로 메모리를 해제하는 것이 아니라 Garbage Collection을 사용하기 때문에 해당 Object에 대한 Reference만 제거하면 됩니다. 예를 들어 onResume에서 setBackgroundDrawable(drawable)로 세팅해주고 onPause에서는 setBackgroundDrawable(null)로 지우시고, 만약에 Activity안에 해당 drawable에 대한 변수를 가지고 있다면 모두 null을 대입해서 reference되는 부분을 없애주시면 됩니다.

그렇게 한 후에 System.GC();  등을 실행하면 아무데서도 reference하고 있지 않는 object들이 메모리에서 제거될 수 있습니다.


Posted by Kelly Cook
,

[안드로이드] 메모리 누수 OutOfMemoryError 관련 링크들
원문: http://ecogeo.tistory.com/287




[번역] 안드로이드 메모리릭 회피하기

[출처] [번역] 안드로이드 메모리릭 회피하기|작성자 휴우

Posted by Kelly Cook
,