나는 전에 한 작업이지만 다른 방법으로 작업을 수행했습니다. 목표는 두 개의 이미지를 다운로드 한 다음 주 스레드에 표시하는 것입니다 (예, 처리기, asynctask 또는 이와 유사한 것, 문제 없음과 동기화하는 것을 의미합니다.)하지만 문제가 있습니다. (onAttach) 무슨 설명 니펫다른 스레드에서 리스너를 실행하십시오.
이@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(MainActivity.TAG,"thread id on attach:" + Thread.currentThread().getId()); //it return thread ID:1
Runnable r = new Runnable(){
@Override
public void run() {
sQuery = new ServerQuery();
mQueue = Volley.newRequestQueue(getActivity());
Log.d(MainActivity.TAG,"inside runnable:" + Thread.currentThread().getId()); //it returns 2200 or something like that... it seems logic, another thread
mQueue.add(sQuery.getThumbs("1",
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(MainActivity.TAG,"inside listener:" + Thread.currentThread().getId()); //what?? returns thread 1! so i can't execute this on background... why it happens?
}
}));
}
};
Thread t = new Thread(r);
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
물론, 이것은 단지 스레드를 만들고 그 쓰레드가 리스너를 정의하지만 ... 내부 왜 리스너가 UI 스레드에서 실행 않는다 (그래서 경우에도? join()을 사용하면 join()은 디버깅을위한 테스트 일 뿐이지 만 이미지 갤러리는 다운로드 한 이미지없이 만들어지고 주 스레드이므로 아무 것도 다운로드 할 수 없습니다!) 그리고 ... 당신은 무엇을합니까? 핸들러 또는 이와 유사한 것을 사용하여 동기화 할 것인가? 아니면 무엇을 사용할 것입니까?
여기 asynctask를 사용해야한다고 생각합니다. – Suraj