误差

2010-04-18 89 views
1

关闭应用程序,我目前正在写为Android平台需要安装的SD卡(或ExternalStorage)的应用程序。我知道它可能不是最好的方式来要求类似的东西,但应用程序会处理大量的数据,我甚至不想考虑将其存储在设备的存储上。误差

无论如何,为了确保应用程序不会在没有外部存储的情况下运行,我会快速检查活动的onCreate方法。如果卡没有安装,我想显示一条错误消息,然后退出应用程序。

我目前的做法是这样的:

public void onCreate (Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try 
    { 
     // initialize data storage 
     // will raise an exception if it fails, or the SD card is not mounted 
     // ... 
    } 
    catch (Exception e) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder 
      .setMessage("There was an error: " + e.getMessage()) 
      .setCancelable(false) 
      .setNeutralButton("Ok.", new DialogInterface.OnClickListener() 
      { 
       public void onClick (DialogInterface dialog, int which) 
       { 
        MyApplication.this.finish(); 
       } 
      }); 
      AlertDialog error = builder.create(); 
      error.show(); 
      return; 
    } 

    // continue ... 
} 

当我运行应用程序,异常得到提高(我提出来手动检查,如果一切正常),正确地显示错误消息。但是,当我按下按钮,应用程序关闭,我得到一个Android错误,应用程序意外关闭(我应该强制退出)。

我在关闭应用程序之前阅读了一些主题,我知道它可能不会发生这种情况。但是,我应该如何阻止应用程序继续运行?发生错误时如何正确关闭应用程序?

+0

您的代码似乎按照您建议的方式工作。我没有看到关于应用程序意外关闭的任何警告。也许你的问题在别处。 – 2010-04-18 20:15:31

+0

在Eclipse中使用'adb logcat',DDMS或DDMS透视图来查看与强制关闭错误相关联的Java堆栈跟踪。这将帮助你诊断你的问题。我同意tkryger的看法,即不会显示您的错误与您在此处列出的代码直接相关。 – CommonsWare 2010-04-18 20:32:29

+0

噢!我在关闭未打开的数据库的'onDestroy'处理程序中有一些较旧的代码。这可能引发了一个例外。谢谢你的评论!但是,我仍然不太确定它是否是正确的方法,所以如果有更好的方法,请告诉我:) – poke 2010-04-18 20:35:36

回答

2

但是,我应该如何防止 应用程序继续运行?

完成您当前的活动应该没问题,就像您今天所做的那样。

如何在发生错误时正确关闭应用程序 ?

你不知道。您关闭组件(活动,服务等)。如果此活动需要SD卡,并且SD卡不可用,请完成活动。

一般来说,你觉得Android的“应用程序”越少,而你的APK的组件越多,松散耦合的组件越多越好。