Android

FAILED BINDER TRANSACTION

안드로이드에서 액티비티나 서비스같은 컴포넌트 간 데이터를 전달할 때 인텐트를 쓴다. 정확히는 인텐트 객체 안의mExtras라는Bundle 형 객체를 활용하는데 이 때 전송할 수 있는 데이터의 제한이 있을까? 결론만 이야기하면 있다. 안드로이드 공식문서에 인텐트의 extras의 크기 제한으로 언급된 내용은 없지만, 일정 크기 이상의 데이터를 intent에 넣어 전달하려고 하면 아래와 같은 에러가 발생한다. 09-06 11:04:42.329 6839-6839/? E/JavaBinder: !!! FAILED […]

FAILED BINDER TRANSACTION 더 읽기"

안드로이드 플랫폼 퍼미션(permission)

L OS부터 안드로이드 어플리케이션은 퍼미션을 protectionLevel에 따라 4가지로 구분하고 있다. 앱 개발자 입장에서는 얼마나 쉽게 권한을 얻을 수 있느냐가 중요한데, 이를 순서대로 정리하면 아래와 같다. normal : <use-permission/> 선언 후, 사용자 동의 없이 사용 가능 dangerous : <use-permission/> 선언 후, 사용자 동의 하에 사용 가능 signatureOrSystem : 아래 signature에 해당하거나, 단말 출시 시 미리 내장되어

안드로이드 플랫폼 퍼미션(permission) 더 읽기"

shadow$_monitor_, shadow$_klass_

안드로이드 API21부터 shadow$monitor(이하, monitor)와 shadow$klass(이하, klass) 변수가 추가되었다. 먼저, monitor 변수는 hashcode() 메소드에서 사용하기 위해 추가되었다. klass 변수는 Brooks pointer라는 이름의 컨셉을 구현하기 위한 것으로 보인다. 이 컨셉에서 힙 메모리에 있는 모든 객체(object) 속의 klass 변수는 자기 자신 객체를 가리키는 역할을 한다. 그리고, GC를 위해 객체가 다른 장소로 이동(정확히는 복사 후 삭제)될 때 새로운 객체를 즉시

shadow$_monitor_, shadow$_klass_ 더 읽기"

java.lang.IllegalStateException: Failure saving state: … has target not in fragment manager: …

프레그먼트를 사용하다보면, 아래와 같은 에러를 만날 수 있다. Shutting down VM FATAL EXCEPTION: main Process: me.sunphiz.android.fragment, PID: 18882 java.lang.IllegalStateException: Failure saving state: CalleeFragment{68fee09 #7 CalleeFragment} has target not in fragment manager: CallerFragment{9c5480e} at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1843) at android.support.v4.app.FragmentController.saveAllState(FragmentController.java:134) at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:566) at android.support.v7.app.AppCompatActivity.onSaveInstanceState(AppCompatActivity.java:498) at android.app.Activity.performSaveInstanceState(Activity.java:1474) at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1317) at android.app.ActivityThread.callCallActivityOnSaveInstanceState(ActivityThread.java:5398) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:4700) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:4774) at android.app.ActivityThread.access$1400(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1819) at

java.lang.IllegalStateException: Failure saving state: … has target not in fragment manager: … 더 읽기"

View의 android:elevation이 안될 때

그림자를 올바로 주었는지, 그림자가 표시될 수 있는지  확인하면 된다. android:elevation 값을 주자. 당연히, 그림자 효과를 위해 얼마나 높게 보일지 정해주어야 한다. android:background 를 지정하자. 배경색을 지정하지 않으면, 그림자가 생기지 않는다. ImageView와 같은 경우 이미지로 인해 background 색이 화면에 표시되지 않는다 하더라도 색을 지정하자. 참고로, 반투명은 가능하지만 투명도가 너무 높으면 그림자가 안보인다. 그림자가 필요한 뷰와 부모

View의 android:elevation이 안될 때 더 읽기"