전체 글 328

[안드로이드] layoutInflater 성능 올리기

XML을 코드에서 가져와서 사용 할 경우, layoutInflater.inflate 방법을 사용한다.하지만, 이 놈을 사용 하는 만큼 뷰를 계속 불러 온다. 10개의 뷰가 있는데 layoutInflater.inflate 코드가 실행 되면 getView를 통해 뷰를 하나씩 10번 불러 온다. 얼마나 낭비인가?그럼 어떻게? 간단하다. 이 놈을 사용 하게 될 경우 view가 null인지를 체크 한 뒤 사용 하면 된다. 원래 getView에 convertView가 있는데 public View getView(View convertView, ViewGroup parent) { if (convertView == null) { convertView = onCreateView(parent); } onBindView(co..

[안드로이드]날짜를 시스템 언어에 따라 표시하기

날짜를 시스템 언어대로 표시할 수 있는 코드입니다. 예) 한국어: 2016년 4월 8일 금요일 English(US) : Friday April 8 2016English(UK) : Friday 8 April 2016 FORMAT_NUMERIC_DATE 플래그 적용시: 4/8/2016 Calendar c = Calendar.getInstance(); int flags = 0; if(formatdate != 0){ flags |= DateUtils.FORMAT_NUMERIC_DATE; } if(year) flags |= android.text.format.DateUtils.FORMAT_SHOW_YEAR; if(day) flags |= android.text.format.DateUtils.FORMAT_SHOW_..

[안드로이드] java.lang.IllegalStateException: Cannot execute task: the task is already running.

AsyncTaks를 아래 방법으로 호출 하면 두 번 실행 하게 되는 효과를 발휘 한다. aAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).executor(params); java.lang.IllegalStateException: Cannot execute task: the task is already running. aAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params) 요렇게 바꿔 줘야 한다.

[안드로이드] 6.0 마시멜로 DOZE 모드 adb 명령

마시멜로우는 배터리 미 충전 중, 오래 동안 폰 켜지 않을 경우 Doze 모드로 들어가서 낮잠을 주무신다... 이때는 알람이고 뭐고... 거의 받을 수 없는 상태가 되기에 꼭 실행 해야 할 작업이 있을 경우는 Doze모드를 해제 해야 한다. 그 때 필요한 작업은? 1. 다음 명령어를 통해 배터리가 충전되지 않도록 변경 합니다. $ adb shell dumpsys battery unplug2. 디바이스 스크린을 끕니다. 3. 다음 명령어를 반복 실행 하여, 디바이스 상태가 idle이 되도록 합니다.$ adb shell dumpsys deviceidle step4. 화면을 켜거나, 디바이스를 크게 움직이면 Doze 모드에서 빠져나옵니다. 5. 다음 명령어를 통해 배터리 충전 상태를 원래되로 되돌릴 수 있습니..

[안드로이드] 스트링으로 동적 값 적용하기

string.xml에 아래와 같이 작성을 하면, 동적인 값을 보여 주는 스트링을 만들 수 있다. 매번 스트링을 만드는 수고를 덜 수 있다. string파일 예) 08:%02d분, 09:%02d분, 10:%02d분 2%d는 두 자리수로 표기, 02%d는 01, 02, 03 처럼 표기 한다. 코드getString(R.string.test, Integer.parseInt(tempMinute), Integer.parseInt(tempMinute), Integer.parseInt(tempMinute));

[안드로이드] 프리퍼런스가 업데이트 안된다면?

말그대로 프리퍼런스(preference) summary가 없데이트 안 될 경우에는 어떻게 하느냐? 다른 화면을 갔다 올 경우에는 비교적 summary가 업데이트 잘 되지만, 한 화면에서 바로 바로 수정이 필요 할 경우에는 쉽지 않다. 만약, 잘 되다가 destory를 한 뒤 다시 들어 왔는데 이 때 부터 작동이 안된다면 ? 이전 글(BadTokenException)과 같은 내용의 해결 방법을 사용하면 된다. Preference를 static으로 만들어서 setSummary를 하면 된다. 어디서? onPreferenceChange(Preference pref, Object newValue) { 에서 받아온 pref로 pref.setSummary() 하지 말고 전역으로 선언해 놓고 하면 된다. 즉, publ..

[안드로이드] BadTokenException -is your activity running? 프리퍼런스에서 발생한다면?

이 에러는 참으로 갑자기 불쑥 나오기로 유명하다. 액티비티 종료 중에 컨텍스트를 사용하다가 잘 발생한다. android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@40b47bd8 is not valid; is your activity running? 1. 그래서 액티비티 종료 후에도 핸들러가 돌아 갈수도 있기에 갑자기 다이얼로그를 띄우는 등의 행동은 하지 말아야 할 것이다. 이럴때는 isFinishing()을 사용해서 예방 할 수 있다. 2. 또는 다른 액티비티와 연계되어서 발생 할 경우에는 getContext(), this.activity가 아닌 getParent()를 사용 하면 해결..

반응형