在我的应用程序中我使用IntentService发送短信.
@Override
protected void onHandleIntent(Intent intent) {
Bundle data = intent.getExtras();
String[] recipients = null;
String message = getString(R.string.unknown_event);
String name = getString(R.string.app_name);
if (data != null && data.containsKey(Constants.Services.RECIPIENTS)) {
recipients = data.getStringArray(Constants.Services.RECIPIENTS);
name = data.getString(Constants.Services.NAME);
message = data.getString(Constants.Services.MESSAGE);
for (int i = 0; i < recipients.length; i++) {
if(!StringUtils.isNullOrEmpty(recipients[i])) {
try {
Intent sendIntent = new Intent(this, SMSReceiver.class);
sendIntent.setAction(Constants.SMS.SEND_ACTION);
PendingIntent sendPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, sendIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Intent deliveryIntent = new Intent(this, SMSReceiver.class);
deliveryIntent.setAction(Constants.SMS.DELIVERED_ACTION);
PendingIntent deliveryPendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, deliveryIntent, …Run Code Online (Sandbox Code Playgroud) 假设我有以下代码:
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(myRunnable);
Run Code Online (Sandbox Code Playgroud)
现在,如果myRunnable抛出一个RuntimeExcpetion,我怎么能抓住它?一种方法是提供我自己的ThreadFactory实现,newSingleThreadExecutor()并uncaughtExceptionHandler为其中的Threads 设置自定义.另一种方法是换myRunnable行Runnable包含try-catch -block 的本地(匿名).也许还有其他类似的解决方法.但是......不知怎的,这感觉很脏,我觉得不应该这么复杂.有清洁的解决方案吗?
当我连续点击"捕获"按钮(没有任何中断)时,获取运行时异常如何解决此问题?
如果它不可能,那我怎么处理这个例外?
btnCapture = (ImageButton) findViewById(R.id.btnCapture);
final MediaPlayer mp = MediaPlayer.create(CameraLauncherActivity.this, R.raw.button);
btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// line where getting RuntimeException
camera.takePicture(null, null, mPicture);
}
});
Run Code Online (Sandbox Code Playgroud)
日志:
02-12 14:48:41.580: E/AndroidRuntime(6997): FATAL EXCEPTION: main
02-12 14:48:41.580: E/AndroidRuntime(6997): java.lang.RuntimeException: takePicture failed
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.hardware.Camera.native_takePicture(Native Method)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.hardware.Camera.takePicture(Camera.java:1126)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.hardware.Camera.takePicture(Camera.java:1071)
02-12 14:48:41.580: E/AndroidRuntime(6997): at app.cam.shane.CameraLauncherActivity$3.onClick(CameraLauncherActivity.java:116)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.view.View.performClick(View.java:4223)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.view.View$PerformClick.run(View.java:17275)
02-12 14:48:41.580: E/AndroidRuntime(6997): at android.os.Handler.handleCallback(Handler.java:615) …Run Code Online (Sandbox Code Playgroud) 这对我来说很奇怪. RuntimeException继承自Exception,继承自Throwable.
catch(Exception exc) { /* won't catch RuntimeException */
Run Code Online (Sandbox Code Playgroud)
但
catch(Throwable exc) { /* will catch RuntimeException */
Run Code Online (Sandbox Code Playgroud)
我知道这RuntimeException是特别的,因为它没有被检查.但据我所知,这仅适用于是否必须声明例外,而不是它们是否被捕获.即便如此,我也不知道为什么这个逻辑会在捕获Throwable时破坏.
这与我非常相关,因为我遇到了可以在终端操作中抛出RuntimeExceptions的情况.我不确定这个模式的名称,但类似的,我的类EmailRoller需要一个数组Callbacks.代码如下所示:
for(Callback cb : callbacks) {
try {
cb.call(item);
}
catch(Exception exc) {
logger.error("Error in callback: ", exc);
}
}
Run Code Online (Sandbox Code Playgroud)
所以这是一个像OOME这样的东西需要通过的情况,因为如果其中一个回调消耗所有的机器内存,那肯定会影响其他的运行.但是一个NullPointerException?还是一个IndexOutOfBoundsException?这些会影响回调,但不会阻止其他人运行.
此外,这是一个企业设计.不同的程序员或团队可以添加回调来处理项目,但它们应该彼此隔离.这意味着,作为负责将这些回调相互隔离的程序员,我不应该依赖它们来确保错误不会漏掉.捕捉Exception应该是正确的,但不是因为RuntimeException滑倒.所以我更普遍的问题是:这里有什么好的模式?只是catch(Exception | RuntimeException exc),我认为由于继承而导致语法错误?
我正在将我的项目从eclipse转移到Android Studio.在运行我的应用程序时,我收到以下错误.无法找到任何解决方案.我也启用了multidex.
错误:任务':app:transformClassesWithDexForDebug'的执行失败.com.android.build.api.transform.TransformException:java.lang.RuntimeException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:进程'命令'C:\ Program Files\Java\jdk1.7.0_79\bin\java.exe''以非零退出值1结束
我的gradle文件也在下面
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.myapp"
minSdkVersion 9
targetSdkVersion 21
multiDexEnabled true
}buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard- android.txt'), 'proguard-project.txt', 'proguard-google-api-client.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:23.4.0'
compile 'com.google.android.gms:play-services:+'
compile 'com.google.http-client:google-http-client-gson:1.20.0'
compile 'com.google.code.gson:gson:2.1'
compile 'com.android.support:appcompat-v7:23.4.0'
compile files('libs/activation.jar')
compile files('libs/additionnal.jar')
compile files('libs/android-support-v7-cardview.jar')
compile files('libs/android-support-v7-recyclerview.jar')
compile files('libs/commons-logging-1.1.1.jar')
compile 'com.google.api-client:google-api-client:1.18.0-rc'
compile 'com.google.api-client:google-api-client-android:1.18.0-rc'
compile 'com.google.api-client:google-api-client-appengine:1.18.0-rc'
compile 'com.google.http-client:google-http-client:1.18.0-rc'
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
compile 'com.google.http-client:google-http-client-appengine:1.18.0-rc'
compile 'com.google.oauth-client:google-oauth-client:1.18.0-rc'
compile 'com.google.oauth-client:google-oauth-client-appengine:1.18.0-rc'
compile files('libs/google-api-client-gson-1.18.0-rc.jar') …Run Code Online (Sandbox Code Playgroud) 我试图在我的代码中抛出异常,如下所示:
throw RuntimeException(msg);
Run Code Online (Sandbox Code Playgroud)
但是,当我在NetBeans中构建时,我收到此错误:
C:\....java:50: cannot find symbol
symbol : method RuntimeException(java.lang.String)
location: class ...
throw RuntimeException(msg);
1 error
Run Code Online (Sandbox Code Playgroud)
我需要导入一些东西吗?我拼错了吗?我敢肯定我一定要做一些哑巴:-(
我的应用程序崩溃是因为
扩展类android.support.design.widget.FloatingActionButton时出错
这是我在XML中的代码
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="16dp"
android:src="@drawable/icon_right"
app:backgroundTint="@color/green"
android:onClick="previewphoto"
app:layout_anchorGravity="bottom|right|end" />
Run Code Online (Sandbox Code Playgroud)
这是我的傻瓜
compile 'com.android.support:appcompat-v7:23.4.0' // appcompat library
compile 'com.android.support:design:23.4.0'
Run Code Online (Sandbox Code Playgroud)
我的logcat
致命异常:主要过程:com.cyanlabsid.cetakphoto,PID:15298了java.lang.RuntimeException:无法启动活动ComponentInfo {com.cyanlabsid.cetakphoto/com.cyanlabsid.cetakphoto.PhotoPicker}:android.view.InflateException:二进制XML文件行#76:二进制XML文件行#76:错误充气类android.support.design.widget.FloatingActionButton在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2423)在android.app.ActivityThread.handleLaunchActivity(ActivityThread. java:2483)在Android.app.Handler.dispatchMessage(Handler.java:)的android.app.ActivityThread.access $ 900(ActivityThread.java:153)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1349) 102)在android.app.Looper.loop(Looper.java:148)的android.app.ActivityThread.main(ActivityThread.java:5441),位于com.android的java.lang.reflect.Method.invoke(Native Method) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:738)at com.android.internal.os.ZygoteInit.main(ZygoteInit.ja va:628)由以下原因引起:android.view.InflateException:二进制XML文件行#76:二进制XML文件行#76:在android.view.LayoutInflater.inflate(LayoutInflater)中输出类android.support.design.widget.FloatingActionButton时出错.的java:543)在android.view.LayoutInflater.inflate(LayoutInflater.java:427)在android.view.LayoutInflater.inflate(LayoutInflater.java:374)在android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java :284)在android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)在com.cyanlabsid.cetakphoto.PhotoPicker.onCreate(PhotoPicker.java:74)在android.app.Activity.performCreate(活动.的java:6303)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2483)在android.app.ActThread.access $ 900(ActivityThread.java:153)在android.app.Act ivityThread $ H.handleMessage(ActivityThread.java:1349)位于android.app.A.Toread.main的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:148) (ActivityThread.java:5441)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:738)在com.android.internal.os .ZygoteInit.main(ZygoteInit.java:628)
有人能说出我的错吗?
C#是否具有Java的java.lang.RuntimeException等价物?
(IE是一个异常,可以在不必被捕获的情况下抛出,或者在抛出异常时程序崩溃.)
我有一些代码可能会抛出已检查和运行时异常.
我想捕获已检查的异常并将其包装为运行时异常.但是如果抛出RuntimeException,我不必将它包装起来,因为它已经是运行时异常.
我的解决方案有点开销,并不"整洁":
try {
// some code that can throw both checked and runtime exception
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)
想要更优雅的方式吗?
(我在stackoverflow上看到一个类似的问题,但答案并不是真正的答案,问题的上下文也有所不同.)
"java.lang.RuntimeException:执行暂停未恢复的活动"
我开发了一个游戏应用程序(使用普通视图和GLSurfaceView).如果我打开和关闭我的手机显示非常快,我可能会导致此异常有时(由ActivityThread抛出),但我的应用程序异常后正常运行.我的应用程序是横向应用程序,也可以在清单中正确设置(包括方向和配置更改).
这个可以吗?
这是ActivityThread在我的应用程序的应用程序名称下抛出的RuntimeException,但它不会终止我的应用程序.