ANR

1:一些基本概念

a: 主线程,子线程的关系,凭什么你是主线程,我是子线程?

其实线程都是一样,只是我们指定了某一线程为主进程而已。

b: 为什么Activity.onCreate,Broadcast.onReceiver,Service.onBind等一系列方法在主线程运行呢?

通过查看以上这些方法调用方,就可以知道答案了。他们都是通过handler消息来处理的
android.app.ActivityThread.H#handleMessage
            case RECEIVER:
                Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "broadcastReceiveComp");
                handleReceiver((ReceiverData)msg.obj);
                Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                break;

具体流程参考:
https://www.jianshu.com/p/b114cf78b297
https://blog.csdn.net/renshuguo123723/article/details/86471734

c: 想要监控咱们APP的各种事件消耗的时间,咱们就可以通过监控主线程的handler 的handleMessage消耗的时间来查看。
查看handler代码:

// android.os.Looper#loop
        if (logging != null) {
            logging.println(">>>>> Dispatching to " + msg.target + " " +
                    msg.callback + ": " + msg.what);
        }
        msg.target.dispatchMessage(msg); //分发消息
        if (logging != null) {
            logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
        }

刚好这个logging对象可以自定义,然后我们重写println方法,通过比较两条消息时间差,就可以得知当前事件的执行时间。

android.os.Looper#setMessageLogging
2:ANR是啥呢?

Android系统中,ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会检测App的响应时间,如果App在特定时间无法相应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR,即Application Not Responding。

3:ANR的种类,产生条件?

在某一事件后的某一时间之后,系统还未做出对应响应,就会产生ANR

事件 时间 关键日志
用户输入 5S Input event dispatching timed out
广播 前台10S,后台60S Timeout of broadcast BroadcastRecord
服务 前台10S,后台 Timeout executing service
content provider 10S Timeout publishing content providers

为什么是这个时间?

    // ActivityTaskManagerService.java  API 30
    // How long we wait until we timeout on key dispatching.
    public static final int KEY_DISPATCHING_TIMEOUT_MS = 5 * 1000;

    // ActivityManagerService.java  API 30
    // How long we allow a receiver to run before giving up on it.
    static final int BROADCAST_FG_TIMEOUT = 10*1000;
    static final int BROADCAST_BG_TIMEOUT = 60*1000;

    // ActiveServices.java   API  30
    // How long we wait for a service to finish executing.
    static final int SERVICE_TIMEOUT = 20*1000;
    // How long we wait for a service to finish executing.
    static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10;

来看个例子,猜猜看,当我们点击button时,会产生ANR吗?:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mViewDataBinding = DataBindingUtil.setContentView(this,
                R.layout.activity_main);
        mViewDataBinding.button
                .setOnClickListener(v -> {
                    Toast.makeText(this, "dianji", Toast.LENGTH_SHORT).show();
                    waitTime();
                });
    }

    private void waitTime() {
        long start = System.currentTimeMillis();
        long end = start;
        while (end - start < 8000) {
            mViewDataBinding.button.setText(end + "");
            end = System.currentTimeMillis();
        }
    }

注意事项: Input的超时机制与其他的不同,对于input来说即便某次事件执行时间超过timeout时长,只要用户后续在没有再生成输入事件,则不会触发ANR.

----- pid 6416 at 2021-05-31 01:25:26 -----
Cmd line: com.example.myapplication

DALVIK THREADS (16):
"main" prio=5 tid=1 Runnable
  | group="main" sCount=0 dsCount=0 flags=0 obj=0x70e9ac28 self=0xe6cc5410
  | sysTid=6416 nice=-10 cgrp=top-app sched=0/0 handle=0xf525b478
  | state=R schedstat=( 7028777690 179773124 1205 ) utm=23 stm=679 core=3 HZ=100
  | stack=0xff6af000-0xff6b1000 stackSize=8192KB
  | held mutexes= "mutator lock"(shared held)
  at com.example.myapplication.MainActivity.waitTime(MainActivity.java:31)
  at com.example.myapplication.MainActivity.lambda$onCreate$0$MainActivity(MainActivity.java:24)
  at com.example.myapplication.-$$Lambda$MainActivity$jRtpOGtrw8cqMNyhtDGNK0XOTPE.onClick(lambda:-1)
  at android.view.View.performClick(View.java:7448)
  at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
  at android.view.View.performClickInternal(View.java:7425)
  at android.view.View.access$3600(View.java:810)
  at android.view.View$PerformClick.run(View.java:28305)
  at android.os.Handler.handleCallback(Handler.java:938)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:223)
  at android.app.ActivityThread.main(ActivityThread.java:7656)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

再来看看监控信息:

        Looper.getMainLooper().setMessageLogging(new Printer() {
            //分发和处理消息开始前的log
            private static final String START = ">>>>> Dispatching";
            //分发和处理消息结束后的log
            private static final String END = "<<<<< Finished";

            @Override
            public void println(String x) {
                if (x.startsWith(START)) {
                    //开始计时
                    BlockMonitor.getInstance().startMonitor();
                }
                if (x.startsWith(END)) {
                    //结束计时
                    BlockMonitor.getInstance().removeMonitor();
                }
            }
        });

public class BlockMonitor {
    private static final String TAG = "=====BlockMonitor=====";
    private static final BlockMonitor sInstance = new BlockMonitor();
    private final Handler mHandler;
    //方法耗时的卡口,500毫秒
    private static final long TIME_BLOCK = 500L;
    private int mCount;

    private BlockMonitor() {
        HandlerThread logThread = new HandlerThread("BlockMonitor");
        logThread.start();
        mHandler = new Handler(logThread.getLooper());
    }

    private final Runnable mLogRunnable = new Runnable() {
        @Override
        public void run() {
            //继续检测
            startMonitor();
            mCount++;
            //打印出执行的耗时方法的栈消息
            StackTraceElement[] stackTrace = Looper.getMainLooper().getThread().getStackTrace();
            StringBuilder sb = new StringBuilder();
            for (StackTraceElement s : stackTrace) {
                sb.append(s.toString());
                sb.append("\n");
            }
            String s = sb.toString();
            Log.e(BlockMonitor.TAG, "mCount--- " + mCount + s);
        }
    };

    public static BlockMonitor getInstance() {
        return sInstance;
    }

    /**
     * 开始计时
     */
    public void startMonitor() {
        mHandler.postDelayed(mLogRunnable, TIME_BLOCK);
    }

    /**
     * 停止计时
     */
    public void removeMonitor() {
        mHandler.removeCallbacks(mLogRunnable);
        mCount = 0;
    }
}
代码来源:https://blog.csdn.net/itobot/article/details/88930669
2021-05-31 09:26:33.915 6646-6697/com.example.myapplication E/=====BlockMonitor=====: mCount--- 14java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:542)
    java.lang.StringBuilder.append(StringBuilder.java:176)
    java.lang.StringBuilder.append(StringBuilder.java:77)
    android.icu.impl.CaseMapImpl.appendUnchanged(CaseMapImpl.java:407)
    android.icu.impl.CaseMapImpl.internalToUpper(CaseMapImpl.java:591)
    android.icu.impl.CaseMapImpl.toUpper(CaseMapImpl.java:650)
    android.icu.text.CaseMap$Upper.apply(CaseMap.java:170)
    android.text.TextUtils.toUpperCase(TextUtils.java:1198)
    android.text.method.AllCapsTransformationMethod.getTransformation(AllCapsTransformationMethod.java:66)
    android.widget.TextView.setText(TextView.java:6268)
    android.widget.TextView.setText(TextView.java:6139)
    android.widget.TextView.setText(TextView.java:6091)
    com.example.myapplication.MainActivity.waitTime(MainActivity.java:32)
    com.example.myapplication.MainActivity.lambda$onCreate$0$MainActivity(MainActivity.java:24)
    com.example.myapplication.-$$Lambda$MainActivity$jRtpOGtrw8cqMNyhtDGNK0XOTPE.onClick(Unknown Source:2)
    android.view.View.performClick(View.java:7448)
    com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
    android.view.View.performClickInternal(View.java:7425)
    android.view.View.access$3600(View.java:810)
    android.view.View$PerformClick.run(View.java:28305)
    android.os.Handler.handleCallback(Handler.java:938)
    android.os.Handler.dispatchMessage(Handler.java:99)
    android.os.Looper.loop(Looper.java:223)
    android.app.ActivityThread.main(ActivityThread.java:7656)
    java.lang.reflect.Method.invoke(Native Method)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2021-05-31 09:26:34.417 6646-6697/com.example.myapplication E/=====BlockMonitor=====: mCount--- 15android.icu.impl.CaseMapImpl.internalToUpper(CaseMapImpl.java:534)
    android.icu.impl.CaseMapImpl.toUpper(CaseMapImpl.java:650)
    android.icu.text.CaseMap$Upper.apply(CaseMap.java:170)
    android.text.TextUtils.toUpperCase(TextUtils.java:1198)
    android.text.method.AllCapsTransformationMethod.getTransformation(AllCapsTransformationMethod.java:66)
    android.widget.TextView.setText(TextView.java:6268)
    android.widget.TextView.setText(TextView.java:6139)
    android.widget.TextView.setText(TextView.java:6091)
    com.example.myapplication.MainActivity.waitTime(MainActivity.java:32)
    com.example.myapplication.MainActivity.lambda$onCreate$0$MainActivity(MainActivity.java:24)
    com.example.myapplication.-$$Lambda$MainActivity$jRtpOGtrw8cqMNyhtDGNK0XOTPE.onClick(Unknown Source:2)
    android.view.View.performClick(View.java:7448)
    com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
    android.view.View.performClickInternal(View.java:7425)
    android.view.View.access$3600(View.java:810)
    android.view.View$PerformClick.run(View.java:28305)
    android.os.Handler.handleCallback(Handler.java:938)
    android.os.Handler.dispatchMessage(Handler.java:99)
    android.os.Looper.loop(Looper.java:223)
    android.app.ActivityThread.main(ActivityThread.java:7656)
    java.lang.reflect.Method.invoke(Native Method)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

再来看个等锁:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity--";
    private ActivityMainBinding mViewDataBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mViewDataBinding = DataBindingUtil.setContentView(this,
                R.layout.activity_main);

        mViewDataBinding.button
                .setOnClickListener(v -> {
                    toast2();
                });

        new Thread() {
            @Override
            public void run() {
                super.run();
                toast1();
            }
        }.start();
    }

    public synchronized void toast1() {
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public synchronized void toast2() {
        Toast.makeText(this, "hahaha", Toast.LENGTH_SHORT).show();
    }
}
----- pid 7736 at 2021-05-31 02:54:05 -----
Cmd line: com.example.myapplication

"main" prio=5 tid=1 Blocked
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x70e9ac28 self=0xe6cc5410
  | sysTid=7736 nice=-10 cgrp=top-app sched=0/0 handle=0xf525b478
  | state=S schedstat=( 935875280 95958190 467 ) utm=37 stm=55 core=0 HZ=100
  | stack=0xff6af000-0xff6b1000 stackSize=8192KB
  | held mutexes=
  at com.example.myapplication.MainActivity.toast2(MainActivity.java:-1)
  - waiting to lock <0x0d672707> (a com.example.myapplication.MainActivity) held by thread 22
  at com.example.myapplication.MainActivity.lambda$onCreate$0$MainActivity(MainActivity.java:23)
  at com.example.myapplication.-$$Lambda$MainActivity$jRtpOGtrw8cqMNyhtDGNK0XOTPE.onClick(lambda:-1)
  at android.view.View.performClick(View.java:7448)
  at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
  at android.view.View.performClickInternal(View.java:7425)
  at android.view.View.access$3600(View.java:810)
  at android.view.View$PerformClick.run(View.java:28305)
  at android.os.Handler.handleCallback(Handler.java:938)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:223)
  at android.app.ActivityThread.main(ActivityThread.java:7656)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
  
  "Thread-2" prio=5 tid=22 Sleeping
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x13182d90 self=0xe6cd5e10
  | sysTid=7764 nice=0 cgrp=top-app sched=0/0 handle=0xc54bc1e0
  | state=S schedstat=( 571026 0 1 ) utm=0 stm=0 core=2 HZ=100
  | stack=0xc53b9000-0xc53bb000 stackSize=1040KB
  | held mutexes=
  at java.lang.Thread.sleep(Native method)
  - sleeping on <0x06a79777> (a java.lang.Object)
  at java.lang.Thread.sleep(Thread.java:442)
  - locked <0x06a79777> (a java.lang.Object)
  at java.lang.Thread.sleep(Thread.java:358)
  at com.example.myapplication.MainActivity.toast1(MainActivity.java:37)
  - locked <0x0d672707> (a com.example.myapplication.MainActivity)
  at com.example.myapplication.MainActivity$1.run(MainActivity.java:30)

广播例子:

Process: com.example.myapplication
PID: 8141
UID: 10153
Flags: 0x30e8bf46
Package: com.example.myapplication v1 (1.0)
Foreground: Yes
Process-Runtime: 15023
Subject: Broadcast of Intent { act=android.intent.action.SCREEN_ON flg=0x50200010 }
Build: google/sdk_gphone_x86_arm/generic_x86_arm:11/RSR1.201013.001/6903271:userdebug/dev-keys

----- Output from /proc/pressure/memory -----
some avg10=0.08 avg60=0.07 avg300=0.01 total=3675977
full avg10=0.05 avg60=0.04 avg300=0.00 total=555677
----- End output from /proc/pressure/memory -----

CPU usage from 21530ms to 0ms ago (2021-05-31 03:08:00.773 to 2021-05-31 03:08:22.303):
  8% 604/system_server: 0.9% user + 7.1% kernel / faults: 4464 minor 17 major
  2.6% 335/surfaceflinger: 0% user + 2.5% kernel / faults: 36 minor 4 major
  2.1% 2701/com.google.android.googlequicksearchbox:search: 0.6% user + 1.4% kernel / faults: 5069 minor 3 major
  1.9% 304/[email protected]: 0% user + 1.9% kernel
  1.6% 314/[email protected]: 0% user + 1.6% kernel / faults: 2 major
  1.3% 866/com.android.systemui: 0.3% user + 1% kernel / faults: 1041 minor 2 major
  1.2% 2179/com.google.android.gms: 0.2% user + 0.9% kernel / faults: 2276 minor 6 major
  1.1% 1294/com.google.android.gms.persistent: 0.3% user + 0.7% kernel / faults: 1249 minor 4 major
  0.9% 170/logd: 0% user + 0.9% kernel / faults: 1 minor 2 major
  0.9% 313/[email protected]: 0% user + 0.9% kernel
  0.6% 355/adbd: 0% user + 0.6% kernel / faults: 285 minor
  0.5% 1104/com.google.android.apps.nexuslauncher: 0.1% user + 0.3% kernel / faults: 267 minor
  0.3% 216/[email protected]: 0% user + 0.2% kernel / faults: 10 minor 3 major
  0.3% 322/[email protected]: 0% user + 0.3% kernel
  0% 846/com.android.bluetooth: 0% user + 0% kernel / faults: 354 minor 11 major
  0.3% 1163/com.android.phone: 0% user + 0.2% kernel / faults: 179 minor
  0.3% 1626/com.google.process.gservices: 0% user + 0.3% kernel / faults: 353 minor
  0.1% 337/logcat: 0% user + 0.1% kernel
  0.1% 1472/com.google.android.inputmethod.latin: 0% user + 0.1% kernel / faults: 122 minor 1 major
  0.1% 10/rcu_preempt: 0% user + 0.1% kernel
  0.1% 171/lmkd: 0% user + 0.1% kernel
  0.1% 297/statsd: 0% user + 0.1% kernel
  0.1% 8089/logcat: 0% user + 0.1% kernel / faults: 7 minor
  0.1% 8096/kworker/u8:4-kverityd: 0% user + 0.1% kernel
  0% 1/init: 0% user + 0% kernel / faults: 1 minor
  0% 9/ksoftirqd/0: 0% user + 0% kernel
  0% 366/traced_probes: 0% user + 0% kernel / faults: 1 minor
  0% 16/ksoftirqd/1: 0% user + 0% kernel
  0% 21/ksoftirqd/2: 0% user + 0% kernel
  0% 26/ksoftirqd/3: 0% user + 0% kernel
  0% 172/servicemanager: 0% user + 0% kernel
  0% 212/jbd2/dm-5-8: 0% user + 0% kernel
  0% 300/zygote: 0% user + 0% kernel / faults: 166 minor
  0% 315/[email protected]: 0% user + 0% kernel
  0% 325/[email protected]: 0% user + 0% kernel
  0% 374/iorapd: 0% user + 0% kernel / faults: 24 minor
  0% 380/wificond: 0% user + 0% kernel
  0% 2872/com.google.android.ims: 0% user + 0% kernel / faults: 32 minor
  0% 4697/com.google.android.googlequicksearchbox:interactor: 0% user + 0% kernel / faults: 16 minor
  0% 6833/com.google.android.videos: 0% user + 0% kernel / faults: 9 minor
  0% 7353/kworker/3:1-mm_percpu_wq: 0% user + 0% kernel
  0% 7365/com.google.process.gapps: 0% user + 0% kernel / faults: 163 minor
  0% 7447/kworker/0:1-events: 0% user + 0% kernel
  0% 7522/kworker/u8:3-events_unbound: 0% user + 0% kernel
  0% 8092/kworker/u8:2-kverityd: 0% user + 0% kernel
 +0% 8140/kworker/2:1-events: 0% user + 0% kernel
 +0% 8141/com.example.myapplication: 0% user + 0% kernel
18% TOTAL: 1% user + 17% kernel + 0.4% iowait + 0% softirq

----- pid 8141 at 2021-05-31 03:08:22 -----
Cmd line: com.example.myapplication

"main" prio=5 tid=1 Runnable
  | group="main" sCount=0 dsCount=0 flags=0 obj=0x70e9ac28 self=0xe6cc5410
  | sysTid=8141 nice=-10 cgrp=top-app sched=0/0 handle=0xf525b478
  | state=R schedstat=( 11098270485 152588332 1096 ) utm=24 stm=1085 core=0 HZ=100
  | stack=0xff6af000-0xff6b1000 stackSize=8192KB
  | held mutexes= "mutator lock"(shared held)
  at com.example.myapplication.MainActivity.waitTime(MainActivity.java:37)
  at com.example.myapplication.MainActivity.access$000(MainActivity.java:14)
  at com.example.myapplication.MainActivity$1.onReceive(MainActivity.java:29)
  at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1556)
  at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(lambda:-1)
  at android.os.Handler.handleCallback(Handler.java:938)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:223)
  at android.app.ActivityThread.main(ActivityThread.java:7656)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

binder通信 :

Process: com.example.myapplication
PID: 12020
UID: 10153
Flags: 0x30e8bf46
Package: com.example.myapplication v1 (1.0)
Foreground: Yes
Process-Runtime: 10051
Activity: com.example.myapplication/.MainActivity
Subject: Input dispatching timed out (937ec95 com.example.myapplication/com.example.myapplication.MainActivity (server) is not responding. Waited 5002ms for MotionEvent(deviceId=9, source=0x00001002, displayId=0, action=DOWN, actionButton=0x00000000, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, classification=NONE, edgeFlags=0x00000000, xPrecision=68.3, yPrecision=41.0, xCursorPosition=nan, yCursorPosition=nan, pointers=[0: (53.0, 154.0)]), policyFlags=0x62000000)
Build: google/sdk_gphone_x86_arm/generic_x86_arm:11/RSR1.201013.001/6903271:userdebug/dev-keys

"main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x70e9ac28 self=0xe6cc5410
  | sysTid=12020 nice=-10 cgrp=top-app sched=0/0 handle=0xf525b478
  | state=S schedstat=( 879447610 99133049 374 ) utm=36 stm=51 core=3 HZ=100
  | stack=0xff6af000-0xff6b1000 stackSize=8192KB
  | held mutexes=
  native: #00 pc 00000b97  [vdso] (__kernel_vsyscall+7)
  native: #01 pc 000cd46c  /apex/com.android.runtime/lib/bionic/libc.so (__ioctl+28)
  native: #02 pc 00080e6a  /apex/com.android.runtime/lib/bionic/libc.so (ioctl+58)
  native: #03 pc 00050edb  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+331)
  native: #04 pc 000522af  /system/lib/libbinder.so (android::IPCThreadState::waitForResponse(android::Parcel*, int*)+47)
  native: #05 pc 00051fb1  /system/lib/libbinder.so (android::IPCThreadState::transact(int, unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+177)
  native: #06 pc 00048de9  /system/lib/libbinder.so (android::BpBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+153)
  native: #07 pc 0012302f  /system/lib/libandroid_runtime.so (android_os_BinderProxy_transact(_JNIEnv*, _jobject*, int, _jobject*, _jobject*, int)+143)
  at android.os.BinderProxy.transactNative(Native method)
  at android.os.BinderProxy.transact(BinderProxy.java:540)
  at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5698)
  at android.app.ActivityThread.acquireProvider(ActivityThread.java:6813)
  - locked <0x079a8838> (a android.app.ActivityThread$ProviderKey)
  at android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:2916)
  at android.content.ContentResolver.acquireProvider(ContentResolver.java:2432)
  at android.content.ContentResolver.insert(ContentResolver.java:2143)
  at android.content.ContentResolver.insert(ContentResolver.java:2111)
  at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:38)
  at android.view.View.performClick(View.java:7448)
  at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
  at android.view.View.performClickInternal(View.java:7425)
  at android.view.View.access$3600(View.java:810)
  at android.view.View$PerformClick.run(View.java:28305)
  at android.os.Handler.handleCallback(Handler.java:938)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:223)
  at android.app.ActivityThread.main(ActivityThread.java:7656)
  at java.lang.reflect.Method.invoke(Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

"Binder:604_10" prio=5 tid=122 TimedWaiting
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x14702ba0 self=0xbf630210
  | sysTid=1798 nice=-10 cgrp=foreground sched=0/0 handle=0xb024a1e0
  | state=S schedstat=( 2839200490 1359000443 9706 ) utm=34 stm=249 core=0 HZ=100
  | stack=0xb014f000-0xb0151000 stackSize=1008KB
  | held mutexes=
  at java.lang.Object.wait(Native method)
  - waiting on <0x078f07ba> (a com.android.server.am.ContentProviderRecord)
  at java.lang.Object.wait(Object.java:442)
  at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:7461)
  - locked <0x078f07ba> (a com.android.server.am.ContentProviderRecord)
  at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:7594)
  at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2381)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2883)
  at android.os.Binder.execTransactInternal(Binder.java:1154)
  at android.os.Binder.execTransact(Binder.java:1123)
2021-05-31 13:49:02.025 604-1798/system_process E/ActivityManager: Timeout waiting for provider com.example.myapplication/10153 for provider com.example.myapplication providerRunning=false caller=com.example.myapplication/10153
2021-05-31 13:49:02.021 604-655/system_process I/ActivityManager: Killing 12020:com.example.myapplication/u0a153 (adj 0): depends on provider com.example.myapplication/.MyProvider in dying proc com.example.myapplication:hahaha (adj 0)
2021-05-31 13:49:02.022 604-655/system_process I/ActivityManager: Killing 12048:com.example.myapplication:hahaha/u0a153 (adj 0): timeout publishing content providers
=====BlockMonitor=====: mCount--- 3android.os.BinderProxy.transactNative(Native Method)
    android.os.BinderProxy.transact(BinderProxy.java:540)
    android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5698)
    android.app.ActivityThread.acquireProvider(ActivityThread.java:6813)
    android.app.ContextImpl$ApplicationContentResolver.acquireProvider(ContextImpl.java:2916)
    android.content.ContentResolver.acquireProvider(ContentResolver.java:2432)
    android.content.ContentResolver.insert(ContentResolver.java:2143)
    android.content.ContentResolver.insert(ContentResolver.java:2111)
    com.example.myapplication.MainActivity$1.onClick(MainActivity.java:38)
    android.view.View.performClick(View.java:7448)
    com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:967)
    android.view.View.performClickInternal(View.java:7425)
    android.view.View.access$3600(View.java:810)
    android.view.View$PerformClick.run(View.java:28305)
    android.os.Handler.handleCallback(Handler.java:938)
    android.os.Handler.dispatchMessage(Handler.java:99)
    android.os.Looper.loop(Looper.java:223)
    android.app.ActivityThread.main(ActivityThread.java:7656)
    java.lang.reflect.Method.invoke(Native Method)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

你可能感兴趣的:(ANR)