목록FrontEnd/Android (63)
만족
Activity Lifecycle을 살펴보면 Activity가 Running 상태이다가다른 액티비티가 위로 올라오면 onPause()로 진입하고현재 액티비티가 보이지 않는 상태가 되면 onStop()으로 진입한다. 다시 유저가 해당 액티비티로 돌아오면 시점에 따라서onRestart()-> onStart()-> onResume() 또는onCreate()-> onStart()-> onResume() 또는onResume() 의 순으로 라이프사이클이 굴러간다. 다시 액티비티가 포그라운드로 돌아 왔을 때 onResume()은 반드시 실행된다는 점을 알고 적용해보자 public class SimpleActivity extends FragmentActivity{ //Lifecycle Phase에 따라 바뀌는 변수 p..
갑자기 다음과 같은 메일이 날라오며 앱 업데이트가 거부되었다. 의아한 것은 해당 업데이트 내용은 버그 수정 및 편의성 강화로써 광고 관련 코드는 수정된 바가 전혀 없다는 것이다. 이의 신청을 진행했으나 돌아온 답변은 더 이해할 수 없는 내용이였다. 광고가 내 앱을 벗어나 다른 앱 위에 있다는 것인데...무슨 말인지 잘 생각해보니 알게 되었다. 1. 앱이 백그라운드 상태일 때도 전면광고를 표시함mInterstitialAd.adListener = object : AdListener() { override fun onAdLoaded() { if (!isDestroyed){ mInterstitialAd.show() } } override fun onAdClosed() { super.onAdClosed() if(..
https://github.com/Nightonke/BoomMenu Nightonke/BoomMenu A menu which can ... BOOM! - Android. Contribute to Nightonke/BoomMenu development by creating an account on GitHub. github.com 프로젝트에서 이 라이브러리를 사용하던 도중, 오류 리포트에 다음과 같은 예외가 엄청나게 발생하기 시작했다 Fatal Exception: java.lang.IndexOutOfBoundsException Index: 0, Size: 0 java.util.ArrayList.get (ArrayList.java:437) com.nightonke.boommenu.BoomMenuButton...
간단하게 정리한다 화면 구조가 다음과 같다고 가정하자 액티비티 내부에 프래그먼트A가 있고 프래그먼트A내부에 프래그먼트 B가 있다. getFragmentManager는 activity내부의 Fragment들을 대상으로 한다. 즉 프래그먼트 A를 대상으로 작업하려면 getFragmentManager를 사용한다 getChildFragmentManager는 Fragment내부의 Fragment들을 대상으로 한다 즉 프래그먼트 B를 대상으로 작업하려면 프래그먼트 A에서 getChildFragmentManager를 사용한다. 참쉽죠? https://stackoverflow.com/questions/51395604/getsupportfragmentmanager-vs-getchildfragmentmanager getS..
Fragment의 getActivity()는 언제 null을 반환할까 (When do fragment.getActivity() return null) Fragment의 onCreateView 내부에서 getActivity()가 Null을 반환하여 앱이 죽는 현상이 발생했다. 그런데 테스트 환경에서는 Null일때도 있고, 아닐때도 있어 재현이 어려웠는데, 이번 기회에 getActivity()가 언제 null을 반환하는지 알아보려 한다. 먼저 해당 프래그먼트는 다음과 같이 activity의 xml에서 선언되었다. 위의 LifeCycle을 참조하여 각 페이즈마다 getActivity가 Null인지 아닌지를 체크할 것이다. 위 코드를 이용하여 null여부를 로그에 기록한다. 결과는? 생명주기 내부에서는 getA..
A액티비티에서 어떤 데이터를 B액티비티에 전달하고자 할 때, A액티비티에서 Intent.putExtra()를 이용해 인텐트에 데이터를 넣고, startActivity()를 이용해 B액티비티에 데이터를 전달함과 동시에 B액티비티를 실행한다. 그러나, intent.putExtra()에 들어갈 수 있는 데이터의 크기는 무한정하지 않다. 공식 문서를 살펴보면, 이러한 방식으로 매우 큰 데이터가 입력될 경우 TransactionTooLargeException이 발생함을 명시하고 있다. (한 프로세스가 공유하는 트랜젝션 버퍼에 1MB 넘게 입력할 때 이런 문제가 발생한다고 한다. 보통 Bitmap이나 길이가 긴 배열을 입력하려 할 때 발생한다) If the arguments or the return value ar..
ListView가 낮은 성능을 보이는 데는 나의 경험에 기반한 몇 가지 이유가 있다. 1. getView 구현부에서 항상 view inflatation을 하는 경우 2. getView 구현부에서 ViewHolder패턴을 사용하지 않아 항상 업데이트하는 경우 3. ListView 높이 재설정 시 아이템 갯수만큼 measure하는 경우 4. 필요하지 않은 데이터까지 한번에 렌더링하는 경우 ListView 작업은 UIThread에서 이루어지기 때문에, 여기에서 많은 시간을 사용한다면 로그캣에 Layout Skipping메시지가 뜨면서 일정 시간동안 화면이 멈추게 된다. 위의 원인만 제거해주더라도 체감할 수 있을 정도의 성능 향상이 있을 것이다. 1. getView 구현부에서 항상 view inflatation..
안드로이드 개발자라면 누구나 한 번쯤은 ScrollView아래의 ListView를 사용했을 때 ListView의 높이가 쪼그라드는 문제를 경험해본적이 있을 것이다. 구글에 android listview height is weired처럼 검색하면 가장 많이 나오는 솔루션은 요런 함수를 쓰라는 내용이다. 웬만하면 리사이클러뷰를 사용하는 방법으로 회피해가려 하지만 "스크롤뷰+리스트뷰"조합으로 된 모든 코드를 뒤집어버릴 순 없으니 해당 부분에만 위의 함수를 적용시켜주고 있었다. 그런데 예상했던 것과는 달리 위의 함수는 연산시간을 꽤 잡아먹는 녀석이다. (특히 listItem.measure 부분) 200개의 요소가 있는 리스트뷰의 높이를 계산하려고 하니 소요시간이 1초가 넘어가버려서 앱 애니메이션이 뚝뚝 끊기는 ..