sinaweibosdk / weibo_android_sdk

新浪微博 Android SDK
1.83k stars 1.19k forks source link

SDK 4.4.1版,Android 9 大量的ANR #493

Closed Jocerly closed 4 years ago

Jocerly commented 5 years ago

"main" prio=5 tid=1 Waiting | group="main" sCount=1 dsCount=0 flags=1 obj=0x74d593f8 self=0x7c1c014c00 | sysTid=29453 nice=0 cgrp=default sched=0/0 handle=0x7ca2761548 | state=S schedstat=( 145640508 14384166 200 ) utm=12 stm=2 core=2 HZ=100 | stack=0x7fc88c7000-0x7fc88c9000 stackSize=8MB | held mutexes= at java.lang.Object.wait (Native method)

Jocerly commented 5 years ago

详细日志: "main" prio=5 tid=1 Waiting | group="main" sCount=1 dsCount=0 flags=1 obj=0x74d593f8 self=0x7c1c014c00 | sysTid=29453 nice=0 cgrp=default sched=0/0 handle=0x7ca2761548 | state=S schedstat=( 145640508 14384166 200 ) utm=12 stm=2 core=2 HZ=100 | stack=0x7fc88c7000-0x7fc88c9000 stackSize=8MB | held mutexes= at java.lang.Object.wait (Native method)

PiYun01 commented 4 years ago

同遇到,这个怎么处理啊

Jocerly commented 4 years ago

主要是WbShareHandler.registerApp导致的,WbSdk.install初始化是同步阻塞: `public String getAid() throws Exception { String aid = this.loadAidFromCache(); if (!TextUtils.isEmpty(aid)) { return aid; } else { if (this.mVisitorLoginInfo == null || TextUtils.isEmpty(this.mVisitorLoginInfo.getAid())) { Thread t = new Thread(new Runnable() { public void run() { try { WeiboSsoSdk.this.updateInfo("", 1); } catch (Exception var2) { }

                }
            });
            t.start();
            t.join();
        }

        if (this.mVisitorLoginInfo == null) {
            throw new Exception("visitor login failed");
        } else {
            return this.mVisitorLoginInfo.getAid();
        }
    }
}`

还没初始化完,就执行了WbShareHandler.registerApp,这时会报ANR。解决办法: ` ThreadPoolUtils.getInstance().execute(() -> { WbSdk.install(BaseActivity.this, new AuthInfo(BaseActivity.this, com.weibo.net.Weibo.APP_KEY, com.weibo.net.Weibo.APP_REDIRECT_URL, com.weibo.net.ImplWeibo.SCOPE));

        shareHandler = new WbShareHandler(BaseActivity.this);
        shareHandler.registerApp();
        shareHandler.setProgressColor(getResources().getColor(R.color.dm_main));
    });`
sinaweibosdk commented 4 years ago

4.4.3fixed.