1

asyncTask와 함께 루퍼를 어떻게 사용할 수 있습니까?asyncTask와 함께 루퍼를 어떻게 사용할 수 있습니까?

프로그래밍 방식으로 MyResultTable이라는 TableLayout을 만들려면 doImBackground 메서드가 호출됩니다. MyResultTable에는 MotionEvent.ACTION_MOVE 동안 onTouch에서 호출하는 처리기가 있습니다.

asynchTask 내부에서 핸들을 사용하는 것에 대한 불만 사항을 얻은 후에 UIThread에서 핸들러를 실행하기로 결정했습니다. 그러나 그것이 저의 onTouch 메소드가 느린 반응을 일으키는 원인이됩니다. 그래서 내 질문은, 어떻게 내가 asyncTask와 함께 루퍼를 사용합니까?

UIThread 코드 :

activity.runOnUiThread(new Runnable() { 
    public void run() { 
handler.post(mResizeViews); 
    } 
}); 

내 루퍼 시도 : (작동하지 : 빈 화면)

protected MyResultTable doInBackground(Void... params) { 
      Looper.prepare(); 
      MyResultTable table = new MyResultTable(context, other); 
      Looper.loop(); 
      return tabl; 
     } 

답변

3

가 어떻게이 AsyncTask를 가진 루퍼를 사용해야합니까?

그렇지 않을 수도 있습니다.

doImBackground 메서드는 프로그래밍 방식으로 MyResultTable이라는 TableLayout을 만들기 위해 호출됩니다.

이는 doInBackground()의 적절한 역할이 아닙니다. 네트워크 I/O, 디스크 I/O 등 doInBackground()을 사용하십시오. doInBackground()으로 검색 한 데이터를 기반으로 UI ("MyResultTable"이라는 TableLayout)를 생성하려면 onPostExecute()을 사용하십시오.

MyResultTable에는 MotionEvent.ACTION_MOVE 중에 onTouch에서 호출하는 핸들러가 있습니다.

그건별로 의미가 없습니다. Handler을 사용하여 이벤트를 백그라운드 스레드의 기본 응용 프로그램 스레드로 전달합니다. onTouchEvent()이 주 응용 프로그램 스레드에서 호출되므로 Handler이 필요하지 않습니다.

+0

정말인가요? 네가 보통 좋은 대답을 가지고 있다는 것을 나는 안다. 그러나 나는 항상 백그라운드에서 테이블을 모은 다음'onPostExecute'를 사용하여 커스텀 테이블을 가지고있는 linearLayout에 커스텀 테이블을 전달한다. 그렇지 않으면 안드로이드는 UI가 너무 많이 작동한다고 말하는 경향이 있습니다. –

+0

@CoteMounyo : "안드로이드는 UI가 너무 많이 사용된다고 말하는 경향이 있습니다"- Traceview와 같은 도구를 사용하여 성능 문제의 진정한 이유를 찾습니다. – CommonsWare

+0

확인. 그래서 나는 당신의 제안을 시도한다. 그리고 그것은 작동합니다 (+1). UI가 열심히 일하는 것에 대한 Android의 불만은 없습니다. 하지만 내 슬라이더는 여전히 부드럽지 않습니다. 이동을 시작한 다음 사용자가 손가락을 어디로 옮겼는지 이동하는 데 시간이 걸립니다. 참조 http://stackoverflow.com/questions/17958671/increase-sensitivity-to-user-touch –

관련 문제