Android 50

[안드로이드] 프래그먼트에서 뷰 제거 확실하게 하기 -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" 프래그먼트에서 ..

AsyncTask를 전역으로 쓰면?

안드로이드 AsyncTask를 전역으로 쓴다면? 즉, 재활용 하겠다는 의미인데 가능 할까? 불가능하다! 만약 한 번 쓴 비동기 태스크를 재 활용 하려고 하면 아래문구를 보게 될 것이다. java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once) 즉, 변수 이름은 재활용이 가능 하지만 다시 쓰려면 새로 할당을 받으라는 것이다. 당연한 것 아니겠나? 얼음 얼리는 통을 사서 물을 채우고 얼음을 얼려서 먹었는데, 다음 번에 얼음을 먹으려면 당연히 물을 다시 부어서 넣고 기다려야 먹을 수 있지 않겠는가? 그 당시 얼음 통과 얼음은 그 당시의 내 위장 속..

[아이폰 6s vs 갤럭시 S6 vs LG G4] 카메라 비교 리뷰

이번에도 담달폰이되어버린 아이폰 6s... 분홍색 아이폰 6S 너무 갖고 싶네요. 아이폰 6보다 얼마나 더 좋아졌을지 궁금하기도 한데 일단 한국에 넘어오기 전에 카메라 리뷰부터 찬찬히 보면서 기다려봅시다. 갤럭시S6, LG G4 등과의 비교리뷰 사진을 보면서 말이죠. 이 리뷰는 기즈모도에서 한겁니다. 차이가 보이나요??????? 6S는 뭔가 사실적인 그런 냄새가 나는 군요. 갤럭시 S6d와 아이폰 6s의 카메라가 비슷한 느낌을 주는 것 같지만 갤럭시는 약간 둔탁한 느낌이 있는 반면 아이폰은 조금 더 사실적입니다. 물론 이 사실적이란 것이... 조작된 것 일 수도 있죠.(내부 이미지 처리) LG G4가 실내 찰영에서 꼴찌를 했군요. 아니면 신의 재림을 제대로 찍었을 수도... 갤럭시 S6가 좀 오버된 느낌..

포르쉐에 구글카 대신 애플카 탑재 한다.(개인정보 수집 때문?)

구글 오토(Android Auto)가 애플의 카플레이(Car Play)에 한 방먹은 것 같습니다. 모토 트렌드 매거진등에 따르면 포르쉐가 안드로이드 오토를 차량에 장착하려 했으나 개인 정보를 빼가는 것 같아서 철회 하고, 애플의 카플레이를 장착하기로 했다는 소문이 있다고 합니다. 안드로이드 오토는 기본적으로 운전자 습관, 속도, 거리, 기름, 온도, 엔진 정보등을 빼내어 간다는 의심을 받고 있어서 이런 일이 발생했는데요, 이에 구글은 절대 그런일이 없다고 바로 반박했다고 합니다. 하지만, 포르쉐는 그래도 불안하다고 하면서 애플의 카플레이를 장착하기로 했답니다. 루머인지 사실인지 확실하지는 않지만, 개인적으로는 사실로 추정이 되는군요. 구글은 태양계에서 큰형님의 자세로 커왔기 때문에 지구인이라면 누구나 아..

안드로이드 오버라이드의 비밀과 함정 -Preference

PreferenceActivity의 기본 아이템들은 타이틀, 서머리 또는 체크박스만 있기 때문에 너무 단조롭다. 그래서 안드로이드는 오버라이드해서 내 맘대로 UI를 바꿀수 있도록 제공한다. 결국, 아래 그림처럼 seekbar를 넣어서 좀 더 다이나믹하고 인터랙티비한 형태로 바꿀 수 있다. 방법은1. Preference를 extends 하는 클래스를 하나 만든 다.2. 새로 만든 클래스에서 반드시 onCreateView를 만들어 줘야한다. @Override protected View onCreateView( ViewGroup parent ) { super.onCreateView(parent); mLayoutInFlater = (LayoutInflater) getContext().getSystemServic..

[안드로이드] 홈키 5초룰을 아시나요?

앱을 테스트 하던 중, 이벤트를 받고 startActivity를 했는데, mainActivity가 화면에 2-3초 후에 나타나는 현상이 발생했습니다. 왜 이렇게 느리지 하는 생각이 들어 개선점을 찾아 보기로 했지요. 속도를 개선해야 겠다 화면을 많이 그려서 그런가... 리소스를 잡아먹는 코드가 있나 고민에 빠졌죠.코드를 이것저것 빼도 전혀 빨라지지가 않네요. 그런데 이것저것 테스트를 하는 중에 Back 키로 앱을 나간 후 실행하면 바로 뜨고, Home 키로 나간 후 실행하면 뜨지 않는다는 차이점을 발견했지요. 홈 키는 뭐가 다를까?검색을 해 보니 안드로이드에는 일명 5초 룰 이라는 것이 있네요.홈키로 앱을 숨기면 그 activity는 백그라운드에서 startActivity를 해도 5초 동안 꼼짝하지 않는..

[안드로이드] 볼륨 롱키 인식하기

타이머를 써야 하나 flag를 써야 하나 고민도 해봤는데, 안드로이드에서 volume long key 인식하는 방법입니다. @Override public boolean onKeyLongPress(int keycode, KeyEvent event){ if(keycode == KeyEvent.KEYCODE_VOLUME_UP || keycode == KeyEvent.KEYCODE_VOLUME_DOWN) { Log.d(TAG, "Long press KEYCODE_VOLUME_UP"); return true; } return super.onKeyLongPress(keycode, event); } @Override public boolean onKeyDown(int keycode, KeyEvent event) { ..

[애드몹] 테스트 광고 요청하기 - 무효노출 방지

개발 중 애드몹(admob) 광고를 달고 테스트 하다 보면 조회수가 올라갈 텐데요, 앱을 테스트할 때 무효 노출이 발생하지 않도록 하려면 테스트 광고를 요청하는 것이 좋습니다. 방법은 코드 상으로 adRequest를 호출할때, addTestDevice를 하면 됩니다. 릴리즈 시에는 .addTestDevice() 부분은 주석 처리하면 됩니다. mAdView = (AdView) findViewById(R.id.adMobView); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // 테스트 광고 요청 .build(); mAdView.loadAd(adRequest); 출처: https://deve..