我有一个奇怪的问题.我的应用程序永远不会崩溃..它会冻结我的手机.即使我抛出异常它也没有错误日志冻结.
它肯定不是设备问题(在3个设备上试过)而不是应用程序问题(试过几个测试项目).确定它的Android Studio问题,因为它在Eclipse环境中正常工作.
我正在使用Android Studio 1.2.2和Mac OSX.
编辑:其他几个用户报告的同一问题,没有给出其他具体信息.应用程序冻结,日志仅显示"Android VM关闭".不存在Crashlytics,但Google Analytics存在,ga_reportUncaughtExceptions = false
Saket在下面的评论中报道:
这发生在我身边,因为我通过调用Thread.setDefaultUncaughtExceptionHandler()注册了错误配置的UncaughtExceptionHandler
所以只需找到uncaughtExceptionHandler项目中的所有字符串并尝试评论/删除它们.
抱歉,是否有可能在RxJava中设置默认错误处理程序?
例如,我在Utils.kt文件中的一些代码:
fun BaseFragment.callGallery(view: View){
view.clicks().bindToLifecycle(this).subscribe {
RxPaparazzo.takeImage(this)
.usingGallery()
.subscribe { response ->
throw RuntimeException("Where is this exception from?")
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是在堆栈跟踪中,没有Utils.kt关于我的任何文件的任何提示.
我知道我可以在每个订阅者中设置onError.代码如下:
.subscribe ({ response ->
....
}, { it.printStackTrace() })
Run Code Online (Sandbox Code Playgroud)
但我更愿意为所有订阅者设置一个默认的onError.我该怎么做?
堆栈跟踪:
05-07 12:11:48.246 10966-10966/ru.egslava.rxfluxtest E/AndroidRuntime: FATAL EXCEPTION: main
Process: ru.egslava.rxfluxtest, PID: 10966
java.lang.RuntimeException: Unable to destroy activity {ru.egslava.rxfluxtest/rx_activity_result.HolderActivity}: rx.exceptions.OnErrorNotImplementedException: Where is this exception from?
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3831)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3849)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1398)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at …Run Code Online (Sandbox Code Playgroud) 我有一个类似 hello-world 的项目,但我无法对其进行测试!之前,我在另一台计算机上开发这个项目,我可以运行测试。
现在,我搬到另一台电脑上,然后...
Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: Running Instrumented Tests for Dynamic Features is currently not supported on API < 21.`
Run Code Online (Sandbox Code Playgroud)
./gradlew connectedAndroidTest然后我有:
com.android.build.gradle.internal.testing.ConnectedDevice > runTests[GT-I9300I - 4.4.4] FAILED
com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
at com.android.build.gradle.internal.testing.ConnectedDevice.installPackage(ConnectedDevice.java:132)
[no message defined]
java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)
at com.android.ide.common.workers.ExecutorServiceAdapter.await(ExecutorServiceAdapter.kt:102)
at com.android.build.gradle.internal.testing.BaseTestRunner.runTests(BaseTestRunner.java:201)
at com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.lambda$doTaskAction$2(DeviceProviderInstrumentTestTask.java:201)
at com.android.builder.testing.api.DeviceProvider.use(DeviceProvider.java:53)
at com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask.doTaskAction(DeviceProviderInstrumentTestTask.java:191)
at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:74)
at com.android.build.gradle.internal.tasks.NonIncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:34)
at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:91)
at com.android.build.gradle.internal.tasks.NonIncrementalTask.taskAction(NonIncrementalTask.kt:57)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at …Run Code Online (Sandbox Code Playgroud) testing android gradle android-gradle-plugin android-espresso
请原谅我的英语 :( 让我们通过例子来解释我的问题。我们有一个数组a:
var a = Array(1,1,1,1,2)
Run Code Online (Sandbox Code Playgroud)
我们可以:
过滤器a:
a.filter( _ < 2 )
Run Code Online (Sandbox Code Playgroud)计算 a 中的一些元素:
a.count (_ < 2)
Run Code Online (Sandbox Code Playgroud)获取集合中的独特元素:
a.filter { i =>
a.count(_ == i) == 1
}
Run Code Online (Sandbox Code Playgroud)问题是:如何在不引入变量 i 的情况下执行第三个子句?是否有可能写出类似的东西:
a.filter ( a.count ( _ == __) == 1 )
Run Code Online (Sandbox Code Playgroud)
我知道我可以写这个(而且它仍然很短):
a.filter { i => a.count(_ == i) == 1 }
Run Code Online (Sandbox Code Playgroud)
但我只是对答案感兴趣。
blah = 10
def what?
"#{blah}"
end
puts what?
# =>
# NameError: undefined local variable or method `blah' for main:Object
# from (irb):3:in `what?'
# from (irb):5
# from E:/RailsInstaller/Ruby1.9.3/bin/irb:12:in `<main>`
Run Code Online (Sandbox Code Playgroud)
为什么?正确的写法是什么?我应该在局部范围内复制一个变量还是有更好的变体?