最近一年做Android项目过程中,对其的一些注意事项(优化)以及问题总结(一)

1.Message对象

       尽量用Handler.obtainMessage或者Message.obtain()方法,尽量不使用new Message()对象。前两种方法是从Message对象的回收池中获取一个,重复利用。

2.Thread线程

         在使用线程Thread的时候,若该线程所做的动作需要一定的时间,例如对数据库查询,Http请求,则需要使用Thread.start()方式。而非使用Thread.run();原因是由于前者是开启一个线程,二后者是调用方法。

3.后台APP以后,APP重启

        若在Manifest中定义了一些Activity的aunchMode="singleTask",若APP后台时候,并未进入该Activity,后台APP,则不会导致该问题出现。

       下面说一下怎么样会导致该问题的产生

        假如有A,B,C,D四个Activity,其中C的aunchMode="singleTask",其他的默认,当A跳转到B,B跳转C,当前天页面为C时候,后台APP,再次点击APP图标,C还是会展现在前台,这时候,跳转到D,当前台页面处于D的时候,后台APP,再次点击APP图标,则会发现APP前台的页面是C,在解释该问题前,  首先说一下该APP Avtivity栈的目前状况为ABCD,D在C上,C在B上,B在A上。再次点击APP图标,首先从APP栈内存中恢复A,然后恢复B,当恢复到C的时候,由于C的启动模式为singleTask,singleTask可以看成启动一个Activity时候,加入了FLAG_ACTIVITY_CLEAR_TOP动作,这个时候由于D在C上,因此被C毫不犹豫给干了,因此APP前台所展现的就是C。

4.捕获异常,然后上报服务器会发现有时候服务器中有几条相同的错误日志,并且上传的时间非常接近

     这是由于当捕获到异常时候,而这些异常并没有被try,catch捕捉到,而通常这个异常会导致APP闪退,但同时在某些手机上,闪退以后,会试图重新恢复该APP闪退之前所在的状态,于是这便导致了捕获了几次相同的异常。对于该问题,我是从服务器端着手处理,我在APP端试过一些方法,但是感觉效果都不怎么理想。服务器端的工作,我接收过一段时间。所谓处理,也就是通过内容,加时间戳比较的方式,这部分我想大家都懂的。因此我就不画蛇添足了。

5.退出APP

     在捕获到异常,并将异常上传至服务器以后需要将APP退出,我在处理的时候,发现使用killprogress基本是无效的,于是便采用了其他的一些方法,例如为栈中的每一个Activity添加一个引用。但是要注意,在使用的时候,一定要注意记得释放引用,以免造成其他后果。也可以让每一个Activity监听2某一广播,这两者最好是写一个共同的父类,由父类来实现。还有就是通过startActivityForResult方式,递归退出,不过该方式不可取,具体原因就不多做解释了。。哈哈。

   


     以上全属本人在近一年的开发过程中所遇到的问题,以及解决方法。难免有所欠缺,还请多多见谅。

    并欢迎提出问题,共同进步。谢谢

你可能感兴趣的:(最近一年做Android项目过程中,对其的一些注意事项(优化)以及问题总结(一))