android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?
PHP中文网
PHP中文网 2017-04-17 15:29:05
[Android讨论组]
/*
String ObjectResult="原先的结果";
//使用VOLLY框架(与问题无关)
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (url, null , new Listener<JSONObject>(
                ) {
                    //匿名内部类中的方法
                    @Override
                    public void onResponse(JSONObject response) {
                        ObjectResult = response.toString();
                        Log.i("TAG", "内部类:"+ObjectResult);
                    }            
        });
queue.add(jsonObjectRequest);
Log.i("TAG","外部类:"+ObjectResult);
*/

这段程序中执行过程中,是先执行了"Log.i("TAG","外部类:"+ObjectResult);"再执行了匿名内部类中的方法。现在我希望用子线程控制其先执行匿名内部类,之后再执行外部类的操作,具体的方法是什么?
谢谢了!

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
PHP中文网

你内部类中的方法是要在获得reponse之后才能执行。要达成你的目的,必须自己实现一个回调方法。比如像这样,

@Override
public void onResponse(JSONObject response) {
    ObjectResult = response.toString();
    callback.dosomething(ObjectResult);//自己实现的回调方法
}   

强烈建议你看下观察者模式。以我的看法,观察者模式的设计思路非常适合构造回调方法。至于具体的实现,你就要看一下ls的handler。

大家讲道理

抛开你这段代码不看,单根据你的标题来回答:

android假如主线程依赖子线程A的执行结果,如何让A执行完成,之后主线程再往下执行呢?

需要在子线程执行完成的地方,通过主线程的Handler发送一条消息;主线程收到消息后执行:

public class MainActivity extends Activity {
    private Handler uiHandler = new Handler(){
        // 覆写这个方法,接收并处理消息。
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 1:
                    break;
            }
        }
    };
    
    class ChildThread extends Thread{
        @Override
        public void run() {
            try{
                // 子线程执行完毕的地方,利用主线程的handler发送消息
                Message msg = new Message();
                msg.what = 1;
                uiHandler.sendMessage(msg);
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }

PS:主线程是UI线程,不要试图让UI线程等待某个结果,之后再往下执行,这会导致UI卡顿。
UI线程是一直循环的,我们需要通过消息机制通知UI线程去做一些事情。

更多的可以参考:
Android中Handler的使用
安利我的一篇笔记 : ) Android_Message_Handler_消息处理机制总结笔记

迷茫

你好, 我现在也遇到了同样的,
我想要在外部类的方法中药一个返回值,内部类是网络请求获取的json,
现在的问题也是先执行了外部类的方法,
请问你现在解决了么

巴扎黑

网络请求设置成同步的不就可以了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号