android-notes / cockroach Goto Github PK
View Code? Open in Web Editor NEW降低Android非必要crash
License: MIT License
降低Android非必要crash
License: MIT License
install方法里面的Looper.loop();会导致这个问题
有些第三方crash监控,例如腾讯的BUGLY,如果实现原理 也是设置了Thread.setDefaultUncaughtExceptionHandler,那么Cockroach可能让这些监控完全失效了,又或者是使Cockroach无法捕获子线程异常。
目前的在Android P 以下的手机上,在activity 的生命周期报错时,都可正常拦截到,且可以正常finish 打开的activity。但是在Android P 的手机上,会黑屏。有计划修复吗?
如果直接在Application里面install一次,在应用退出的时候再uninstall ,在没有uninstall之前 ,会不会影响系统原有分配给App的消息队列 ?我看是直接让MainLooper while(true)循环....
你好,请教一下,有些异常我不想加入到崩溃保护,如何设置异常白名单呢
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent( MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
SecondActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String ing = null;
Log.d("logggg", ing.length() + "");
Button button = (Button) findViewById(R.id.btn);
button.setText("hellosdfsfa");
}
这个黑屏是由于什么原因导致的呢,请教下
当线上发现进入某个Activity有大量crash时,若装载Cockroach后不影响APP运行,不影响用户体检,就可以通过后端控制来自动开启Cockroach,当退出这个Activity后自动卸载Cockroach。这样其他用户再次进入该Activity就不会crash。
在application#oncreate 初始化2.0版本,没有其他初始化代码的
Cockroach.install()
在mainActivity#onCreate手动
throw new RuntimeException("测试测试测试测试测试测试测试测试测试测试测试测试");
APP照样崩溃
我在fragment中添加了一个控件,没有对这个控件进行findViewById操作,然后设置他的点击事件,运行后启动程序就卡死半天无响应结束了,该怎么做呢,我在mainAcitivty中进行安装和卸载
楼主有在demo集成bugly吗,我集成了bugly异常无法上传,请问如何解决?
Cockroach放在第一个初始化(在bugly之前)在页面启动过程当中触发异常(测试用的是:Color.parseColor("534"))。会进入安全模式,onUncaughtExceptionHappened方法会调用,但是bugly无法上报,只能手动上报错误。有办法可以优化吗?
请问有直接的 jcenter地址么
在Activity初始化的时候就抛出一个异常直接就卡死了 。
比如这样 findViewById(R.id.tv_title).setOnClickListener(this);
这个tv_title不在setContentView(R.layout.activity_main)的activity_main里面。
就不行了。
在异常之后,我通过我通过Throwable获取到 ‘ArithmeticException: divide by zero’,请问我可以通过什么办法在异常时将错误的类信息比如'ScpDetailActivity$onViewCreated$1.onClick(ScpDetailActivity.kt:44)',从而让我传到后台,方便问题的定位
请问你在哪里判断的回调 ?
onMayBeBlackScreen
MayBe & new RuntimeException("black screen")
如果真的是 maybe 这样好么?
你好,能否捕获所有崩溃?现在还是会有些崩溃上报到bugly,比如oom等,让bugly上的崩溃率减少。谢谢
有点懵逼啊 大佬 和bugly配合使用怎么使用?
2020-07-02 13:30:52.496 1544-3461/system_process E/ActivityTrigger: activityStartTrigger: not whiteListedcom.aiyang.android_crashx/com.aiyang.crash_catch.FourActivity/1 2020-07-02 13:30:52.498 1544-3461/system_process E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.aiyang.android_crashx/com.aiyang.crash_catch.FourActivity/1 2020-07-02 13:30:52.507 1544-3471/system_process E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.aiyang.android_crashx/com.aiyang.crash_catch.FourActivity/1 2020-07-02 13:30:52.664 15676-15676/com.aiyang.android_crashx E/AndroidRuntime: FATAL EXCEPTION: main Process: com.aiyang.android_crashx, PID: 15676 java.lang.RuntimeException **at com.aiyang.crash_catch.MyView.onDraw(MyView.java:29)** at android.view.View.draw(View.java:19145) at android.view.View.updateDisplayListIfDirty(View.java:18095) at android.view.View.draw(View.java:18873) at android.view.ViewGroup.drawChild(ViewGroup.java:4218) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4002) at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw(ConstraintLayout.java:2023) at android.view.View.updateDisplayListIfDirty(View.java:18086) at android.view.View.draw(View.java:18873) at android.view.ViewGroup.drawChild(ViewGroup.java:4218) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4002) at android.view.View.updateDisplayListIfDirty(View.java:18086) at android.view.View.draw(View.java:18873) at android.view.ViewGroup.drawChild(ViewGroup.java:4218) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4002) at android.view.View.updateDisplayListIfDirty(View.java:18086) at android.view.View.draw(View.java:18873) at android.view.ViewGroup.drawChild(ViewGroup.java:4218) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4002) at android.view.View.updateDisplayListIfDirty(View.java:18086) at android.view.View.draw(View.java:18873) at android.view.ViewGroup.drawChild(ViewGroup.java:4218) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4002) at android.view.View.updateDisplayListIfDirty(View.java:18086) at android.view.View.draw(View.java:18873) at android.view.ViewGroup.drawChild(ViewGroup.java:4218) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4002) at android.view.View.draw(View.java:19148) at com.android.internal.policy.DecorView.draw(DecorView.java:788) at android.view.View.updateDisplayListIfDirty(View.java:18095) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:643) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:649) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:757) at android.view.ViewRootImpl.draw(ViewRootImpl.java:3035) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2830) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2383) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1422) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6834) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029) at android.view.Choreographer.doCallbacks(Choreographer.java:841) at android.view.Choreographer.doFrame(Choreographer.java:772) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1015) at android.os.Handler.handleCallback(Handler.java:793) at android.os.Handler.dispatchMessage(Handler.java:98) at android.os.Looper.loop(Looper.java:173) at android.app.ActivityThread.main(ActivityThread.java:6698) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782) 2020-07-02 13:30:52.699 1544-3461/system_process E/ActivityTrigger: activityStartTrigger: not whiteListedcom.aiyang.android_crashx/com.aiyang.crash_catch.MainActivity/1 2020-07-02 13:30:52.700 1544-3461/system_process E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.aiyang.android_crashx/com.aiyang.crash_catch.MainActivity/1 2020-07-02 13:30:53.197 1544-1631/system_process E/ActivityTrigger: activityResumeTrigger: not whiteListedcom.aiyang.android_crashx/com.aiyang.crash_catch.MainActivity/1
其实这个库并不能帮你解决程序中的逻辑错误,它只是当你出现异常的时候让你的app进程不会崩,可以减少crash的次数,增加用户体验和留存率而已。
但是异常发生时,异常后面的代码都不会被执行到,程序的逻辑会到异常处为止,接下来的逻辑是程序把异常一层一层往上抛,如果抛到最后还没有被处理掉,那么app就会crash。
这个框架就是在异常被抛到最上层的时候把它处理掉了,仅此而已。
不过有个新的疑惑,Cockroach在安装时,手动调用了Looper.loop(),那ActivityThread的main方法中调用的那个Looper.loop()还会被执行吗?loop()方法中是一个死循环,那这样会有两个死循环同时在跑吗?
非生命周期出了Bug能够捕获到,没什么问题,但是在生命周期里面捕获到了问题,虽然能捕获到,但是他几秒后还是会蹦掉,没办法让他不蹦吗?
只是抓的是mainLooper那不应该抓的只是抓的是main中的吗,异步线程不应该还是会蹦吗
接入Cockroach做A/B TEST时,发现使用了Cockroach的实验组,华为android 10机型上出现了大量的Native Crash,表现为启动闪退,堆栈如下:
1 #00 pc 00441c2e /apex/com.android.runtime/lib/libart.so (MterpInvokeVirtual+277) [armeabi-v7a]
--
2 #01 pc 000dc814 /apex/com.android.runtime/lib/libart.so (mterp_op_invoke_virtual+20) [armeabi-v7a]
3 #02 pc 16678e6c <unknown>
4 java:
5 [Failed to get Java stack]
是否Free-Reflection引起呢,目前Free-Reflection已经升级到2.2.0版本,Cockroach中使用的还是1.2.0版本,今天会升级Free-Reflection再次发灰度实验。
只在Appcation里面安装 然后一直不卸载会有问题吗?
oom是一个error不是exception。但是有时候在安卓低版本的设备上程序有时候可能会内存溢出导致崩溃,有没有一种方案可以不弹出这个崩溃的弹窗
> /**
* 子线程抛出异常时始终调用该方法。主线程只有第一次抛出异常时才会调用该方法,该方法中到的throwable都会上报到bugly。以后主线程的异常只调用 {@link #onBandageExceptionHappened(Throwable)} * * @param thread * @param throwable */ protected abstract void onUncaughtExceptionHappened(Thread thread, Throwable throwable);
/** * 当原本导致app崩溃的主线程异常发生后,主线程再次抛出导致app崩溃异常时会调用该方法。(自己try catch住的异常不会导致app崩溃) * (该方法中到的throwable不会上报到bugly,也无需上报到bugly,因为本次异常可能是由于第一次主线程异常时app没有崩溃掉才发生的,只要修复了bug就不会发生该异常了) * * @param throwable 主线程的异常 */ protected abstract void onBandageExceptionHappened(Throwable throwable);
方法注释写的太绕了,至今不明白这两个方法什么意思。作者在试图把简单的方法进行复杂的描述? 自带混淆属性?
有道翻译
uncaught-->未捕获
bandage-->绷带
有什么不同,应用场景是什么?为什么不是主线程对应一个方法,子线程对应一个方法。为什么两个要混用啊?
UncaughtExceptionHandler 如果是捕获子线程异常的,为什么主线程第一次抛出异常时会调用该方法?
UncaughtExceptionHandler 如果是捕获所有异常的,那就不需要 if (t == Looper.getMainLooper().getThread()) 来判断是否主线程了。 这块什么逻辑?
enterSafeMode:安全模式是做什么的,为什么要写这个模式?
我打印了ExceptionHandler接口的四个方法,同一个crash 为什么会回调多个的方法?例如,有一次同时回调了uncaughtExceptionHappened和bandageExceptionHappened?
别说我不仔细看文档和注释,别说我能力有限小白等等这些话。 我就是看不懂才问的
2 android.os.Parcel.readParcelable(Parcel.java:2765)
3 android.os.Parcel.readValue(Parcel.java:2668)
4 android.os.Parcel.readArrayMapInternal(Parcel.java:3037)
5 android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288)
6 android.os.BaseBundle.unparcel(BaseBundle.java:232)
7 android.os.BaseBundle.size(BaseBundle.java:355)
8 android.app.servertransaction.LaunchActivityItem.hashCode(LaunchActivityItem.java:193)
9 java.util.AbstractList.hashCode(AbstractList.java:541)
10 java.util.Objects.hashCode(Objects.java:98)
11 android.app.servertransaction.ClientTransaction.hashCode(ClientTransaction.java:236)
12 java.lang.Object.toString(Object.java:273)
13 java.lang.String.valueOf(String.java:2896)
14 java.lang.StringBuilder.append(StringBuilder.java:132)
15 android.os.Message.toString(Message.java:529)
16 android.os.Message.toString(Message.java:500)
17 com.yunshuxie.bearword.crashsafe.g$2.handleMessage(Cockroach.java:103)
18 android.os.Handler.dispatchMessage(Handler.java:102)
19 android.os.Looper.loop(Looper.java:193)
20 android.app.ActivityThread.main(ActivityThread.java:6898)
21 java.lang.reflect.Method.invoke(Native Method)
22 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
23 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
我觉得是Cockroach页面第103行Log里面使用了msg.toString引起的,故而把这个log删除了
有博客或者wiki讲解下原理么?.
用Gradle习惯了,不想再下载全部的lib导入了。
java.lang.IllegalStateException
The specified child already has a parent. You must call removeView() on the child's parent first.
com.wanjian.cockroach.Cockroach$2.boolean handleMessage(android.os.Message)(Unknown Source:76)
报错信息是这样的
native: #00 pc 000498e8 /system/lib/libc.so (__epoll_pwait+20)
native: #1 pc 0001b9e5 /system/lib/libc.so (epoll_pwait+60)
native: #2 pc 0001ba15 /system/lib/libc.so (epoll_wait+12)
native: #3 pc 00010153 /system/lib/libutils.so (android::Looper::pollInner(int)+118)
native: #4 pc 00010045 /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+32)
native: #5 pc 000b2e59 /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, _jobject*, int)+24)
native: #6 pc 001a5d7d /system/framework/arm/boot-framework.oat (Java_android_os_MessageQueue_nativePollOnce__JI+92)
at android.os.MessageQueue.nativePollOnce(Native method)
at android.os.MessageQueue.next(MessageQueue.java:325)
at android.os.Looper.loop(Looper.java:142)
at com.vb.baseframe.logging.CrashLogger.lambda$start$0(CrashLogger.java:177)
at com.vb.baseframe.logging.-$$Lambda$CrashLogger$euMZFyaMBeyoncQBPcn4SPonIhg.run(lambda:-1)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6518)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
使用方法没问题,本地验证crash会防护住。但monkey时,发生anr堆栈如下。
Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 10. Wait queue head age: 5617.8ms.)
Layout state should be one of 100 but it is 10
com.wanjian.cockroach.Cockroach$1.run(Cockroach.java:47)
你好,bugly 上报了这个错误,请问是啥原因,谢谢
对于集成了腾讯bugly反馈的app也可以吗?需要做什么处理?
handlerException里面是否可以用RxAndroid实现,这样如果有耗时操作也可以做了:
Cockroach.install(new Cockroach.ExceptionHandler() {
// handlerException内部建议手动try{ 你的异常处理逻辑 }catch(Throwable e){ } ,以防handlerException内部再次抛出异常,导致循环调用handlerException
@Override
public void handlerException(final Thread thread, final Throwable throwable) {
//开发时使用Cockroach可能不容易发现bug,所以建议开发阶段在handlerException中用Toast谈个提示框,
Observable.just(throwable)
.subscribeOn(Schedulers.io())
.map(new Func1<Throwable, Throwable>() {
@Override public Throwable call(Throwable throwable) {
/**
* 如果有,耗时操作可以放在这里
*/
return throwable;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Throwable>() {
@Override public void call(Throwable throwable) {
try {
//建议使用下面方式在控制台打印异常,这样就可以在Error级别看到红色log
Log.e("AndroidRuntime","--->CockroachException:"+thread+"<---",throwable);
Toast.makeText(MyApplication.this, "Exception Happend\n" + thread + "\n" + throwable.toString(), Toast.LENGTH_SHORT).show();
// throw new RuntimeException("..."+(i++));
} catch (Throwable e) {
Log.e("AndroidRuntime","--->CockroachException:"+thread+"<---",e);
}
}
});
}
});
in gradle:
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
02-27 18:54:25.200 6127-6127/com.tencent.bugly.demo E/InputEventSender: Exception dispatching finished signal.
02-27 18:54:25.200 6127-6127/com.tencent.bugly.demo E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
02-27 18:54:25.220 6127-6127/com.tencent.bugly.demo E/MessageQueue-JNI: java.lang.RuntimeException: This Crash create for Test! You can go to Bugly see more detail!
at com.tencent.bugly.crashreport.CrashReport.testJavaCrash(BUGLY:131)
at com.tencent.bugly.demo.MainActivityAAA.onClick(MainActivityAAA.java:65)
at android.view.View.performClick(View.java:4438)
at android.view.View.onKeyUp(View.java:8244)
at android.widget.TextView.onKeyUp(TextView.java:5652)
at android.view.KeyEvent.dispatch(KeyEvent.java:3060)
at android.view.View.dispatchKeyEvent(View.java:7668)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2143)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1526)
at android.app.Activity.dispatchKeyEvent(Activity.java:2418)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:226)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2070)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3846)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3820)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3551)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3712)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2015)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1709)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1700)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1992)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:138)
at android.os.Looper.loop(Looper.java:123)
at com.tencent.bugly.demo.Crash$1.run(Crash.java:46)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)
at dalvik.system.NativeStart.main(Native M
02-27 18:54:25.230 6127-6162/com.tencent.bugly.demo E/CrashReport: Java Catch Happen
02-27 18:54:25.230 6127-6162/com.tencent.bugly.demo E/CrashReport: 3
02-27 18:54:25.330 6127-6162/com.tencent.bugly.demo E/CrashReport: stack frame :14, has cause true
02-27 18:54:25.600 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: #++++++++++Record By Bugly++++++++++#
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # You can use Bugly(http:\bugly.qq.com) to get more Crash Detail!
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # PKG NAME: com.tencent.bugly.demo
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # APP VER: 1.0
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # LAUNCH TIME: 2017-02-27 18:54:20
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # CRASH TYPE: JAVA_CATCH
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # CRASH TIME: 2017-02-27 18:54:25
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # CRASH PROCESS: com.tencent.bugly.demo
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # CRASH THREAD: main
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # REPORT ID: 1c91392b-82f4-4302-b75e-c5ae3e75418b
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # CRASH DEVICE: C42SD320 ROOTED
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # RUNTIME AVAIL RAM:246759424 ROM:822931456 SD:1063991296
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # RUNTIME TOTAL RAM:760266752 ROM:1044131840 SD:1069539328
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: # CRASH STACK:
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: com.tencent.bugly.demo.MyException: hahahaha this is MyException :This Crash create for Test! You can go to Bugly see more detail!
at com.tencent.bugly.demo.MainActivityAAA$1$1.run(MainActivityAAA.java:50)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at com.tencent.bugly.demo.Crash$1.run(Crash.java:46)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: This Crash create for Test! You can go to Bugly see more detail!
at com.tencent.bugly.crashreport.CrashReport.testJavaCrash(BUGLY:131)
at com.tencent.bugly.demo.MainActivityAAA.onClick(MainActivityAAA.java:65)
at android.view.View.performClick(View.java:4438)
at android.view.View.onKeyUp(View.java:8244)
at android.widget.TextView.onKeyUp(TextView.java:5652)
at android.view.KeyEvent.dispatch(KeyEvent.java:3060)
at android.view.View.dispatchKeyEvent(View.java:7668)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2143)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1526)
at android.app.Activity.dispatchKeyEvent(Activity.java:2418)
at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:226)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2070)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3846)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3820)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3551)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3712)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2015)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1709)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.
02-27 18:54:25.970 6127-6162/com.tencent.bugly.demo E/CrashReport: #++++++++++++++++++++++++++++++++++++++++++#
02-27 18:54:26.180 6127-6162/com.tencent.bugly.demo E/CrashReport: not to shut down return
02-27 18:54:26.600 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:27.610 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:28.610 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:29.610 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:30.620 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:31.620 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:32.620 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:33.630 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:34.630 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:35.630 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:36.640 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:37.640 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:38.640 1556-1556/system_process E/WifiHW: get_wifi_device_num is 1
02-27 18:54:39.160 1556-1570/system_process E/ActivityManager: ANR in com.tencent.bugly.demo (com.tencent.bugly.demo/.MainActivityAAA)
PID: 6127
Reason: Input dispatching timed out (Waiting because the focused window has not finished processing the input events that were previously delivered to it.)
Load: 4.81 / 5.01 / 4.86
CPU usage from 5660ms to 0ms ago:
6.5% 1107/tvos: 3.1% user + 3.3% kernel
3.8% 1388/adbd: 0.5% user + 3.3% kernel / faults: 458 minor
1.7% 1556/system_server: 0.7% user + 1% kernel / faults: 129 minor
1.2% 2007/com.cantv.launcher: 1% user + 0.1% kernel
0.5% 1087/surfaceflinger: 0.5% user + 0% kernel
0.5% 5500/RtmpMlmeTask: 0% user + 0.5% kernel
0% 3574/com.tvezu.urc.service: 0% user + 0% kernel / faults: 2 minor
0% 1//init: 0% user + 0% kernel
0.1% 3/ksoftirqd/0: 0% user + 0.1% kernel
0% 1097/logwrapper: 0% user + 0% kernel
0.1% 1098/virtualkeypad: 0% user + 0.1% kernel
0.1% 1627/com.android.systemui: 0.1% user + 0% kernel
0% 1644/com.mstar.tv.service: 0% user + 0% kernel
0.1% 5498/RtmpTimerTask: 0% user + 0.1% kernel
0.1% 5599/logcat: 0% user + 0.1% kernel
0.1% 6124/kworker/0:2: 0% user + 0.1% kernel
9.4% TOTAL: 3% user + 4.4% kernel + 1.9% softirq
CPU usage from 2527ms to 3046ms later:
7.6% 1107/tvos: 1.9% user + 5.7% kernel
1.9% 1449/IRQThread_202: 0% user + 1.9% kernel
1.9% 1526/Picture Monitor: 0% user + 1.9% kernel
5.7% 1388/adbd: 0% user + 5.7% kernel / faults: 48 minor
1.9% 1388/adbd: 0% user + 1.9% kernel
1.9% 5593/adbd: 0% user + 1.9% kernel
5.7% 1556/system_server: 1.9% user + 3.8% kernel
5.7% 1570/ActivityManager: 0% user + 5.7% kernel
1.9% 1585/InputReader: 1.9% user + 0% kernel
1.9% 1598/HWCursorMonitor: 1.9% user + 0% kernel
1.1% 1087/surfaceflinger: 0% user + 1.1% kernel
1.1% 1296/hwcVsyncThread: 0% user + 1.1% kernel
1.3% 2007/com.cantv.launcher: 1.3% user + 0% kernel
2.7% 2007/.cantv.launcher: 2.7% user + 0% kernel
1.4% 5599/logcat: 1.4% user + 0% kernel
1.5% 6124/kworker/0:2: 0% user + 1.5% kernel
14% TOTAL: 5.7% user + 7.6% kernel + 0.9% softirq
02-27 18:54:39.620 1087-1166/? E/SurfaceFlinger: blurlayer setlayer do not need tran!
02-27 18:54:39.620 1087-1087/? E/BlurLayer: after Layer::doTransaction
2.0版上传到 jcenter了吗?怎么引入?
请问下主线程调用两次looper.loop不会有问题吗? 这样不是就有两个while true在一直取消息? @android-notes
can use with Bugly together?
哪位大佬说一下这个是怎么使用的
捕获到异常了,但是一直黑屏,进不去啊
来回切换,会造成activity 界面定在那里,用法一样的,捕获异常后,返回上页,再进再返回,页面定在那里。
弱弱的问一句这个库怎么集成到项目啊,使用gradle还是要下载包啊
给个完整jcenter下载地址
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.SJJ-dot:Cockroach:2.0.1'
}
2.0
直接fork的源码只修改了gradle的版本2.0.1
增加了 按键崩溃 退出,可修改需要直接崩溃的方法。A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.