[안드로이드 공부] 201

안드로이드 비동기 태스크 the task has already been executed

안드로이드에서는 비동기적으로 UI 작업을 처리 할 수있도록 asyncTask라는 놈을 제공한다. 하지만, 여러모로 까탈스러운 점이 많으니 조심하자. mTask = new aTask(); if(mTask != null){ mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } 소스를 보면 먼저 태스크를 생성하고 실행 한다. 그러나 만약, if(mTask == null) { mTask = new aTask(); mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }else { mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } 위와 같이 다시 생성 하지 않..

안드로이드 프리퍼런스 보이기 안보이기

PreferenceScreen은 xml에서 gone을 해도 보인다. 그럼 소스코드에서 변경해야 하는데 일반적인 방법으로 해서는 되지 않는다. PreviewPreference mCheckBoxPref = (PreviewPreference) findPreference(KEY_SETTINGS); PreferenceCategory mCategory = (PreferenceCategory) findPreference("key_PreferenceCategory"); mCategory.removePreference(mCheckBoxPref); 프리퍼런스를 카테고리에 추가하고 카테고리에 있는 프리퍼런스를 보이지 않게 만들면 된다.

안드로이드 서비스 3단계 과정

안드로이드 서비스(service)를 시작하고, 동작하는지 확인하고 마지막으로 멈추는 간단한 3가지 과정. public static void startSensor(Context context) { if (Tools.isServiceRunning("com.comostudio.service.SensorService", context) == false) { context.startService(new Intent(context, SensorService.class)); } } public static void stopSensor(Context context) { if(Tools.isServiceRunning("com.comostudio.service.SensorService", context)){ context..

[안드로이드 스튜디오] 정말 쉬운 패키지명 변경 -단 2번만 클릭하면된다!

패키지명 변경 이젠 정말 간단하게 해보자! 1. androidmanifest.xml 에서 Rename Package to ios단축키가 안 먹힌다면 마우스 우측키를 누르고 리팩토링을 선택 한다 2. 왼쪽 Project 섹션의 Android에서 samsung폴더 클릭 후 Shift + F6 리팩토링 Rename Package to apple 결국 com.ios.apple로 변경됨 자, 얼마나 간단한가? 단 두 번만에 깔끔하게 완성이다! 위 처럼 하면com.a.b 에서 a만 변경하기가 정말 쉽다. 괜히 패키지 매니저로 들어가서 이것 저것 변경 하다가 완전히 지저분하게 망쳐 놓지 말자.

[안드로이드] 프래그먼트에서 뷰 제거 확실하게 하기 -You must call removeView()

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 뷰페이져에 달린 얘들에서 디스트로이 뷰 하면서 제거 해줘야 한다. @Override public void onDestroyView() { super.onDestroyView(); if(mRootView !=null){ ViewGroup parentViewGroup = (ViewGroup) mRootView.getParent(); if( null != parentViewGroup ) { parentViewGroup.removeView( mRootView )..

[안드로이드] 프래그먼트 안정화 시키기

프래그먼트는 액티비티 아빠에게 소속되어있다가 아빠가 잠시 한 눈을 팔 때 붙었다 떨어졌다 하면서 실종되는 문제를 가지고 있다. 즉, 이런 문제 때문에 isAdded를 사용하면 붙어 있나 없나를 알아 낼 수 있지만.. 이건 그냥 임시 방편일 뿐이다. isAdded()를 쓰면 그냥 피해가지만..... 이건 너무 많은 비용이 든다.... 처리 못하는게 너무 많아 진다.... can not resolve android.support.v4.app.FragmentManager.--> getSupportFragmentManager() in your code, not getFragmentManager() You must call removeView() on the child's parent first" 프래그먼트에서 ..

[안드로이드] 미디어플레이어 에러 대처하기 (-38, -19)

error (-38, 0) 미디어 플레이어가 준비 되지 않았는데 시작 하게 되면 발생하는 에러다.즉, 준비 리스너를 달고 난 뒤 준비가 끝났다는 이벤트가 오면 시작 시키도록 하자. mPlayer.prepareAsync(); mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { mp.start(); } }); 그러나,위와 같이 하면 또.. -38이 날 확률이 높다. mPlayer.prepareAsync(); 아래와 같이 코드를 리스너 밑으로 달자. 그래야 확실하게... 준비 된 사수로 부터 발사를 할 수 있다..... mPlayer.setOnPreparedListe..

[안드로이드] AsyncTask를 연속으로 사용할 때 문제점

asyncTask를 연속으로 사용할 때 어떤 문제점이 발생 할까? 1. 만약, 1개의 비동기 태스크를 사용한다고 가정 하자.2. 비동기 태스크가 사용자에 의해 계속 호출 된다고 하자.3. 비동기 태스크는 할 일을 다하고 onPost에서 마지막 할일을 마쳐 준다.4. 무슨 문제가 있나? 5. 원래 비동기 태스크의 결과는 항상 onPost에서 얻어오기를 희망 한다. 6. 하지만... 연속으로 비동기태스크를 돌리게 되면 섞이는 경우가 발생한다.7. A가 처음 태스크, B를 두 번째 태스크라고 하자.8. A가 돌고 있는데 B를 실행 했다. 9. A의 onPost가 실행되고 A는 마무리 짓는다. 이것이 정상이다. 하지만10. B가 실행되면서 A의 onPost 이전에 실행 된다. 즉, 끼어든다.11. 하지만.. A..

[안드로이드] Low Battery 테스트 하기

앱을 만들다 보면 Low Battery에 대한 처리가 필요할 때가 있다. 이를 테스트 하려고 배터리를 다 쓸 때까지 기다려서는 테스트가 힘들어 진다. 이 때 유용하게 사용할 수 있는 adb 명령어 입니다. adb shell am broadcast -a android.intent.action.BATTERY_LOW 이렇게 명령어를 치면 등록된 브로드캐스트의 onReceive로 action이 들어오게 된다.로우 배터리 일때 하고 싶은 동작을 해 주면 될 것이다. android.intent.action.BATTERY_LOW 리시버 등록은 다음과 같이 하면 된다. ... intentFilter.addAction("android.intent.action.BATTERY_LOW"); intentFilter.addAct..

[안드로이드] EditText setText Exeception

에디트텍스트(EditText)를 사용하다가 아래와 같은 익셉션을 만난다면 무엇에 주의 해야 할까? E/InputEventReceiver: Exception dispatching input event.E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallbackE/MessageQueue-JNI: android.content.res.Resources$NotFoundException: String resource ID #0xE/MessageQueue-JNI: at android.content.res.Resources.getText(Resources.java:244) setText(int resId)는 리소스 아이디를 받는 타입이다. ..