繁体   English   中英

在另一个线程中执行侦听器

[英]Execute Listener in another thread

我正在尝试在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()仅仅是调试的测试,但是图像库是在没有下载图像的情况下创建的,并且我不能下载任何东西,因为它是主线程!) 。您对使用处理程序或类似的东西进行同步处理有什么看法? 或您将使用什么?

如果您每次输入侦听器时都创建一个新线程? 因为执行侦听器的人是侦听器的调用者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM