[안드로이드 공부] 204

[안드로이드] 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)는 리소스 아이디를 받는 타입이다. ..

[안드로이드] EditText 여러개 포커스, 커서 변경

안드로이드 EditText가 여러개 있거나, 다른 곳으로 포커스를 옮겨야 할 경우가 있다. 어떻게 해야 할까? 1. 현재 에디트텍스트의 커서를 지운다.setCursorVisible(false) 2. 다른 에디트텍스트나 아이템에 커서를 살린다. setCursorVisible(true) 3. 죽이고, 살리면 살아난 애는 깜빡일까? 그냥 자고 있다. 포커스를 요청 해야 한다. 4. 포커스 좀 주세요... mEditText.requestFocus(); 이러면 끝났나? 그럼 혼난다. 1. 왠만하면 setCursorVisible(false)를 쓰지 마라. 2. 다시 살려야 하고 복잡해진다. 3. 그리고 setForcusable, setForcusableInTouchMode 는 기본으로 True 4. editable..

[안드로이드] Listener Return false, true 의미

안드로이드에는 수 많은 리스너(Listener)가 있다. 기다렸다가 처리하라는 의미다. 그런데 return false, return true가 항상 따라 다닌다. 이게 뭐가 중요할까? 1. true- 일 다했으니 해당 이벤트에 대해서는 다음에 쌓인일은 지워. 2. false- 아직 일 다 못했다.. 다음에 쌓여 있는 같은 일 또 보내줘.. 처리 하게... 그렇다.true는 깔끔하게 처리 하고 끝낸다.false는 일 덜 처리 했다... 즉, event 값에 원하는 값이 안 오거나, null이 오거나... 등 만족 스럽지 못했을 경우에 사용 하면 된다.

[안드로이드] EditText 맨 뒤에 커서 위치 시키기 -java.lang.indexoutofboundsexception setspan ends beyond length

안드로이드 에디트 텍스트의 맨 뒤에 커서를 위치 시키는 방법을 알아 보자. 이게 기본이 아니라는 것이 그렇지만... 공부 하라는 선생님의 말씀이라는 것 같아서... 숙제를 해본다. 1. 길이의 맨 뒤에 붙여 보자 editText.setSelection(editText.length()); 2. 선생님을 만나라java.lang.indexoutofboundsexception setspan ends beyond length 3. 선생님의 충고를 들어라. Editable editable = mFrontEditText.getText(); Selection.setSelection(editable, editable.length()); 4. 짐싸라. 5. 하산 하라. 6. 뒤통수 맞고 다시 책상에 앉아라.

[안드로이드] TextView 글자 흐르기 marquee 효과

글자가 흘러간다? HTML에서 많이 봐왔던 흘러가는 글자를 안드로이드에서도 할 수 있다? 당연히 코드 친구들인데 안 될리가 없다. 이 친구들끼리 흘러가는 세월의 이름은 marquee로 통한다. 간단히.... XML에서 아래와 같이 하고, android:ellipsize="marquee" android:focusable="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" marquee_forever 는 기본 값이 -1이다. 즉, 몇 번 반복 할 것인가 라고 유추 할 수 있다.1을 넣으면 1번만 100을 넣으면 100 번 흐른 뒤 멈춘다. 코드에서 textView.setSelected(true)를 해주면 된다. 단, 주의..

[안드로이드] 위젯 이벤트 연결

안드로이드 스튜디오에서 만들어진 위젯 에 이벤트를 연결해 보자 위젯에 버튼을 하나 추가하고, 버튼 클릭 시 내 앱으로 이동하게 만드는 루틴이다. [my_app_widget.xml]에 이미지 버튼을 하나 추가하고 [MyAppWidget.java]를 다음과 같이 수정하였다. static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { CharSequence widgetText = context.getString(R.string.appwidget_text); // Construct the RemoteViews object RemoteViews views = new RemoteViews(conte..

[안드로이드] setText 업데이트 적용 안되는 현상

UI에서 setText를 적용하기는 참 귀찮다. 이 놈이 현재 UI 스레드에서 돌고 있는지 등에 대한 고려를 해야 하기 때문이다. 즉, 팝업에 갔다 오거나... 여기 저기 갔다와서 적용사항을 변경해야 하는데 이때 setText를 하면 먹히지 않는다. 즉, 그 때와 지금의 주인이 다르기 때문이다. 이럴 때에 사용하라는 방법이 핸들러를 돌려라... 스레드를 돌려라... 등의 추천이 많은데... 그냥 다시 찾아서 넣어주면 된다. LayoutInflater layoutInFlater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rootView = layoutInFlater.inflate(R.layout.fr..