首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android的生产力应用程序

Android的生产力应用程序
EN

Code Review用户
提问于 2013-03-03 21:54:56
回答 2查看 1.7K关注 0票数 12

我为Android编写了一个生产力应用程序。它允许您切换系统设置,如蓝牙、妻子、屏幕亮度、音量、铃声、移动数据、飞机模式等。不幸的是,我发现设备制造商以各种可能的方式修改操作系统,禁用功能,请求额外的权限,或者只让系统应用程序使用。也就是说,在安卓系统上切换WiFi需要android.permission.CHANGE_WIFI_STATE许可,但大多数三星设备也需要android.permission.ACCESS_WIFI_STATE。移动数据交换在许多设备上被简单地禁用。

这使得无法预测我的代码将如何在特定设备上工作,或者在未来版本的OS上工作。但与此同时,我绝对不想让我的应用崩溃,因为没有比这更糟糕的了。因此,为了安全起见,我一直在使用有时被称为“口袋妖怪异常处理”(Gotta‘called!):

代码语言:javascript
复制
try {
    //Do stuff
} catch (Exception e) {
    //Log an error, send crash report, etc.
}
//Keep calm and carry on

我知道,这通常被认为是一个不好的做法,但我只是找不到一个更好的方法来处理这种情况。我无法预测出什么会出错的所有可能性。我大多数执行操作的方法如下所示:

代码语言:javascript
复制
private boolean switchWiFi(boolean state) {
    try {
        WifiManager wm = (WifiManager)getSystemService(WIFI_SERVICE);
        wm.setWifiEnabled(state);
        return true; //Executed successfully
    } 
    catch (Exception e){
        //Give user a notification about an error, rather than crash
        showErrorNotification("Couldn't switch WiFi.");
        if(BuildConfig.DEBUG){Log.getStackTraceString(e);}//Log exception stack trace
        return false; //Execution failed
    }
}

是否有更好的方法来处理异常?

EN

回答 2

Code Review用户

回答已采纳

发布于 2013-03-04 11:22:49

当调用的API抛出未知的异常时,我认为除了捕获所有异常(有时也是Throwables )之外,没有其他方法。+1 Jeroen Vannevel的评论也是。

无论如何,一个通用的接口可能能够稍微改进代码:

代码语言:javascript
复制
public interface Command {

    run() throws Exception;

    String getName();

}

然后,您可以使用像WifiSwitcher这样的实现,并逐一调用它们:

代码语言:javascript
复制
final List<String> errors = new ArrayList<String>();
for (final Command command: commands) {
    try {
        command.run();
    } catch (final Exception e) {
        errors.add("Could not perform command: " + command.getName());
        if (BuildConfig.DEBUG) {
            Log.getStackTraceString(e);
        }
    }
}

if (errors.isEmpty()) {
    return true;
}
showErrorNotification(errors);
return false;

(我没有测试或编译上面的代码。)

票数 2
EN

Code Review用户

发布于 2014-01-09 09:42:33

尝试将捕获的异常作为事件发送到(然后它不会显示为App )。

下面是如何在Android中轻松地完成这一任务:

http://tekkies.co.uk/report-caught-exceptions-as-google-analytics-events/

票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/23402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档