java.lang.RuntimeException: Can‘t create handler inside thread Thread[AsyncTask #1,5,main] that has

90 篇文章 3 订阅

完整log如下:

03-04 04:36:02.685 E/AndroidRuntime( 4724): FATAL EXCEPTION: AsyncTask #1
03-04 04:36:02.685 E/AndroidRuntime( 4724): Process: com.android.systemui, PID: 4724
03-04 04:36:02.685 E/AndroidRuntime( 4724): java.lang.RuntimeException: Can't create handler inside thread Thread[AsyncTask #1,5,main] that has not called Looper.prepare()
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.os.Handler.<init>(Handler.java:227)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.os.Handler.<init>(Handler.java:129)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.view.ViewRootImpl$ViewRootHandler.<init>(ViewRootImpl.java:4848)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:5160)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:719)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:399)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:110)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.assist.AssistManager$3.onConfigChanged(AssistManager.java:183)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.assist.AssistManager.<init>(AssistManager.java:221)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.assist.AssistManager_Factory.provideInstance(AssistManager_Factory.java:107)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.assist.AssistManager_Factory.get(AssistManager_Factory.java:70)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.assist.AssistManager_Factory.get(AssistManager_Factory.java:17)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.statusbar.phone.StatusBar.lambda$startActivityDismissingKeyguard$16(StatusBar.java:2662)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.statusbar.phone.StatusBar.lambda$startActivityDismissingKeyguard$16$StatusBar(Unknown Source:0)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at com.android.systemui.statusbar.phone.-$$Lambda$StatusBar$fPMIOsYMhFXVKHESAjUObpcgeJM.run(Unknown Source:10)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
03-04 04:36:02.685 E/AndroidRuntime( 4724):  at java.lang.Thread.run(Thread.java:923)

产生上述的代码如下:

public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned,
        final boolean dismissShade, final boolean disallowEnterPictureInPictureWhileLaunching,
        final Callback callback, int flags) {
    if (onlyProvisioned && !mDeviceProvisionedController.isDeviceProvisioned()) return;

    final boolean afterKeyguardGone = mActivityIntentHelper.wouldLaunchResolverActivity(
            intent, mLockscreenUserManager.getCurrentUserId());
    Runnable runnable = () -> {
        mAssistManagerLazy.get().hideAssist();

        intent.setFlags(
                Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(flags);
        int result = ActivityManager.START_CANCELED;
        ActivityOptions options = new ActivityOptions(getActivityOptions(
                null /* remoteAnimation */));
        options.setDisallowEnterPictureInPictureWhileLaunching(
                disallowEnterPictureInPictureWhileLaunching);
public Handler(@Nullable Callback callback, boolean async) {
    if (FIND_POTENTIAL_LEAKS) {
        final Class<? extends Handler> klass = getClass();
        if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&
                (klass.getModifiers() & Modifier.STATIC) == 0) {
            Log.w(TAG, "The following Handler class should be static or leaks might occur: " +
                klass.getCanonicalName());
        }
    }

    mLooper = Looper.myLooper();
    if (mLooper == null) {
        throw new RuntimeException(
            "Can't create handler inside thread " + Thread.currentThread()
                    + " that has not called Looper.prepare()");
    }
    mQueue = mLooper.mQueue;
    mCallback = callback;
    mAsynchronous = async;
}

造成上述的原因是
AsyncTask 中new Handler 不成功。修改方案

private Runnable mRunnable = new Runnable() {
    @Override
    public void run() {
        mAssistManagerLazy.get().hideAssist();
    }
};
public void startActivityDismissingKeyguard(final Intent intent, boolean onlyProvisioned,
        final boolean dismissShade, final boolean disallowEnterPictureInPictureWhileLaunching,
        final Callback callback, int flags) {
    if (onlyProvisioned && !mDeviceProvisionedController.isDeviceProvisioned()) return;

    final boolean afterKeyguardGone = mActivityIntentHelper.wouldLaunchResolverActivity(
            intent, mLockscreenUserManager.getCurrentUserId());
    Runnable runnable = () -> {
        //mAssistManagerLazy.get().hideAssist();
        mHandler.post(mRunnable);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值