android-asynctask 안드로이드 handlerthread - Android 기본 사항 : UI 스레드에서 코드 실행



3 Answers

나는 HPP 코멘트 에서 하나를 좋아한다, 어떤 매개 변수없이 어디에서든지 사용될 수있다 :

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});
종료 백그라운드 유지

UI 스레드에서 코드를 실행한다는 관점에서 다음과 같은 차이점이 있습니다.

MainActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});

또는

MainActivity.this.myView.post(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});

private class BackgroundTask extends AsyncTask<String, Void, Bitmap> {
    protected void onPostExecute(Bitmap result) {
        Log.d("UI thread", "I am the UI thread");
    }
}



Pomber의 답변은 받아 들일 만하지만 새로운 객체를 반복해서 생성하는 것은 아닙니다. 최상의 솔루션은 항상 메모리 호그를 완화하려고하는 솔루션입니다. 예, 자동 가비지 수집이 있지만 모바일 장치의 메모리 절약은 모범 사례의 범위 내에 있습니다. 아래 코드는 서비스의 TextView를 업데이트합니다.

TextViewUpdater textViewUpdater = new TextViewUpdater();
Handler textViewUpdaterHandler = new Handler(Looper.getMainLooper());
private class TextViewUpdater implements Runnable{
    private String txt;
    @Override
    public void run() {
        searchResultTextView.setText(txt);
    }
    public void setText(String txt){
        this.txt = txt;
    }

}

다음과 같이 어디서든 사용할 수 있습니다.

textViewUpdater.setText("Hello");
        textViewUpdaterHandler.post(textViewUpdater);



안녕 얘들 아이 하나의 기본 질문은 멀리 말해

핸들러 사용

new Handler().post(new Runnable() {
    @Override
    public void run() {
        // Code here will run in UI thread
    }
});



Related