我试图在Android上做点什么...我之前做过的事情,但以其他方式。目标是下载一些图像,然后在主线程中显示它(是的,我的意思是与处理程序同步,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()只是一个调试测试,但是图像库是在没有下载图像的情况下创建的,我不能下载任何东西,因为它是主线程!) 并且......您如何看待使用处理程序或类似的东西来同步它?或者你会用什么?
答案 0 :(得分:0)
如果每次进入监听器时都创建一个新线程? 因为谁执行监听器是监听器的调用者。