我一直在决定如何在我的应用程序中处理异常.
如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象.不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的).
因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE给调用者.我的逻辑是,所有调用者真正关心的是任务是否成功,而不是为什么它不成功.
这是典型方法的一些示例代码(在JAVA中)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我认为这种方法很好,但我真的很想知道管理异常的最佳实践是什么(我应该在调用堆栈中一直冒出异常吗?).
总结关键问题:
跟进/编辑
感谢所有反馈,在网上找到了一些关于异常管理的优秀来源:
似乎异常管理是根据上下文而变化的事情之一.但最重要的是,人们应该如何管理系统中的异常.
另外注意通过过多的尝试/捕获代码腐烂或不给予例外它的尊重(例外是警告系统,还需要警告什么?).
此外,这是m3rLinEz的一个很好的选择评论.
我倾向于同意Anders Hejlsberg和你的看法,大多数来电者只关心操作是否成功.
从这个评论中,它提出了一些在处理异常时要考虑的问题:
我正在为我的Android项目设置ProGuard.我的项目也使用GSON.
我已经研究了与GSON和Android兼容的ProGuard配置,并且遇到了google-gson提供的这个示例https://code.google.com/p/google-gson/source/browse/trunk/examples/android-proguard- example/proguard.cfg.
ProGuard配置复制如下:
##---------------Begin: proguard configuration common for all Android apps ----------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class …Run Code Online (Sandbox Code Playgroud) 在应用程序框架中,我不断看到允许您将多个Int值(通常用于代替枚举)传递到函数中的框架.
例如:
public class Example
{
public class Values
{
public static final int ONE = 0x7f020000;
public static final int TWO = 0x7f020001;
public static final int THREE = 0x7f020002;
public static final int FOUR = 0x7f020003;
public static final int FIVE = 0x7f020004;
}
public static void main(String [] args)
{
// should evaluate just Values.ONE
Example.multiValueExample(Values.ONE);
// should evalueate just values Values.ONE, Values.THREE, Values.FIVE
Example.multiValueExample(Values.ONE | Values.THREE | Values.FIVE);
// should evalueate just values Values.TWO , Values.FIVE …Run Code Online (Sandbox Code Playgroud) 对于某些设备用户,在启动时会显示以下权限对话框
"您想授予AppX受信任的应用程序状态吗?"
用户说是,应用运行正常.但"可信应用程序状态"是什么意思?这看起来很模糊,大多数权限对话框指的是制作http消息,访问联系信息等.
最后的问题
"可信应用程序状态"是指访问客户端设备上的特定API或特定权限设置吗?
我想知道这个的根本原因,因为如果它是API访问问题,我可能会从应用程序中排除这些调用.
我在某些设备上遇到以下情况:当使用点击字段并期望响应时,设备会在屏幕底部中央显示上下文菜单,而不是正确响应该点击事件.
navigationUnclick和trackwheelUnclick
从我读过的内容中,我可以覆盖navigationUnclick和trackwheelUnclick,以防止菜单显示.我这样做是为了屏幕级别,但重现中心菜单场景很困难.这是正确的approch吗?
为什么会这样?有什么方法可以解决这个问题吗?
java ×3
blackberry ×2
android ×1
c# ×1
contextmenu ×1
events ×1
exception ×1
function ×1
gson ×1
integer ×1
menu ×1
permissions ×1
proguard ×1
trusted ×1