android java编程注意事项
2010-05-14 16:45:00 来源:WEB开发网1、创建了一个对象后:
(1)没有在适当的地方释放掉
(2)在应该释放的地方没有做释放操作
例如:下面一段程序:
m_progressDlg = ProgressDialog.show(this, getString(R.string.market),getString(R.string.is_visiting), true);
new Thread() {
public void run() {
boolean downloadOver = downloadwidgetInfo();
if (downloadOver) {
if(null != m_progressDlg)
m_progressDlg.dismiss();//该释放这个对象,如果不释放,应用会很容易出错。
if(flag)
startIntent();
finish();
} else {
Message msg = mHandler.obtainMessage(mUphoneMain.Download_Fail);
mHandler.sendMessage(msg);
}
}
}.start();
上面一段代码的隐患就在于else中没有释放progressDlg 对象。如果程序一旦出错,就会导致该progressDlg一直显示在屏幕上,使应用程序死在这个界面上。
2、逻辑上严重错误:
(1)如果一个activity是在应用程序中处于过渡的作用,例如主要做一些下载等工作。那么在这个activity中最好不要用Dialog相关的程序。如果有,这样会导致一旦此activity在联网或者做某些事情导致异常的时候,就会发出致命错误。因为容易出现这样一种情况:就是在应用程序挂掉的同时,通知了Dialog去在这个activity之上显示一个 Dialog。因为程序挂掉了,所以这个dialog就没有了activity上下文Context的载体。
例如:有三个activity如下:
activity1:入口
activity2:过渡,负责下载网络数据,如果下载失败,就跳出 dialog报错。如果成功就进入activity3.
activity3:
上面这个例子就会出现这种情况:activity2由于系统突然的异常但又突然的恢复后,有可能造成的activity2链接网络部分出现致命错误而被dalvic虚拟机kill掉activity2.而此时你的程序有可能捕获了异常,并将发送消息来启动一个异常dialog的提示框。因为dialog的Context上下文事activity2,但是activity2 此时被killed了。从而出现应用程序的异常终止。
(2)在new一个Thread的时候,要特别注意这个 Thread是否能被控制,或者是否要去控制。特别是在多个线程启动的时候,在android上很难像写java应用程序一样很容易的控制住线程。在多个线程启动的时候,一定要注意线程之间的逻辑。多个线程内部的程序的运行是否需要依赖其他线程内部的代码的功能的完成。
更多精彩
赞助商链接