2017-03-31 4 views
0
The following is my example code. 

private class PostLikes extends AsyncTask<Integer, Void, Void> { 
String type_id, msg; 

@Override 
protected Void doInBackground(Integer... params) { 
//.... 
//.... 
    type_id = jsonobject2.getString("type_id"); 
    msg = jsonobject2.getString("msg"); 
    return null; 
} 

@Override 
protected void onPostExecute(Void result) { 
    if (type_id.equals("1")) { 
    Toast.makeText(getApplicationContext(), "error, Toast.LENGTH_SHORT).show(); 
    } else { 
    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); 
    } 
} 

} 

AsyncTask를 사용하는 표준 방법은 doInBackground 함수가 백그라운드 스레드의 결과를 onPostExecute 함수로 반환하는 것입니다. 그 코드는 잘 작동하지만 위의 코드에 문제가 있는지 여부를 알고 싶습니다. 감사합니다. .안드로이드의 AsyncTask의 doInBackground와 onPostExecute 둘 다에 클래스 멤버를 공유하는 데 문제가 있습니까?

답변

1

이 설정 방법에 대해 확신합니다. 회원 변수 type_idmsg은 다른 멤버 변수와 마찬가지로 onPostExecute()에서 참조됩니다. doInBackground()은 실행 시간이 onPostExecute() 일 때 완료되므로 스레딩 충돌이 발생하지 않습니다.

+0

답변 해 주셔서 감사합니다. 또한 반환 값이 다중 배열 (String, int, boolean) 인 경우 복잡한 매개 변수를 사용하는 것보다 낫다고 생각합니다. 하지만 여기서는 이와 같은 예제 코드를 찾을 수 없습니다. – bb14816

+0

나는 당신의 의견을 알고 싶다. – bb14816

+0

기술적으로, 문서는 백그라운드 계산의 결과가'onPostExecute()'에 전달된다는 것을 설명합니다. 그래서 그 패턴입니다. 문제는 읽기 쉽고 유지 보수가 가능한 것입니다. 패턴을 만족 시키거나 멤버 변수를 사용하기 위해 일회용 구조를 구축해야합니까? 나는 어느 쪽이라도 생각한다. 그러나 나는 의견이 다를 것이라고 확신한다. – Cheticamp

관련 문제