标签:
原文链接:http://www.jianshu.com/p/fc8c4638937e
《App研发录》这部书是包建强写的,说来也巧,在读这边书之前在看池建强的《Mac 人生元编程》 ,所以读这本书的时候,将这两个建强搞混。这本书花了我一周多一点的时间看完。昨天晚看完久久不能寐,一是惊叹这本书的干货太多,这本书不同于市面上其他的Android 教程,给你讲一堆API方法,Android 基础,作者从一个APP团队的负责人的角度高屋建瓴的讲解App框架设计,Bug收集汇总分析,团队建设,项目管理等等方面,而且都是非常适合APP的项目管理者的实在的经验。二是敬佩作者进入Android 领域也不是很久,但是见解非凡,经验老道,感到自己做Android 也快两年了,为啥还达到没有作者的一半高度。唉,看来自己之前的两年过得太轻松了,每天混混日子,自以为懂些Android 技术,能实现产品交代的功能,就得过且过,没有好好的利用好时间,认真学习,加速成长。
题外话太多了,自己觉得有些东西是多余的,是自己的无病呻吟,各位看官,可以忽略不看,直接看下面的干货。
非常赞同作者的观点,我们App必须具有良好的包结构,按照一定规则将不同的类放到不同的地方,目前市面上有两者结构,一种是按照类的类型进行归纳放置,例如Activity 类放一起,adapter 放一起,以此类推;另外一种是按照业务逻辑,例如主页页面逻辑放在一个小包中,用户信息逻辑放在一个小包中,当然小包中可以再分包。
两种都可以,但必须具有一致项目结构,不要弄得不三不四,类到处放,没有一定规则
1 //起始页面,可能需要跳转登录注册页 2 if(User.isLogin()){ 3 //do something 4 }else{ 5 Intent intent=new Intent(this,LoginActivity.class){ 6 intent.putExtra(AppConstant.NeedCallback,true); 7 startActivityForResult(intent,LOGIN_REDIEECT_INSIDE); 8 } 9 } 10 11 @Override 12 public void onActivityResult(int requestCode, int resultCode,Intent data){ 13 if(resultCode!=Activity.RESULT_OK){ 14 return; 15 } 16 swith(requestCode){ 17 case LOGIN_REDIEECT_INSIDE: 18 // do something 19 break; 20 default: 21 break; 22 } 23 } 24 25 //登录页面 LoginActivity 26 if(getIntent.getBooleanExtra(AppConstant.NeedCallback){ 27 setResult(Activity.RESULT_OK); 28 finish(); 29 }ese{ 30 //do otherthing 31 }
UncaughtExceptionHandler
这个类Intent.FLAG_ACITIVITY_NEW_TASK
。getResource().getString()
会报错,建议在调用之前加上isAdd()
判断a=in.readParcelable(null)
会可能抛出BadParcelabeException:ClassNotFoundException when unmarshalling...
改成这样就行a=in.readParcelable(A.class.getClassLoader)
。<application android:largeHeap="true"
可以增加系统为当前app 分配内存,甚至能到达100M以上,但是每次GC 时间会延长,性能会下降。
ProGuard一共包含以下4个功能:
标签:
原文地址:http://www.cnblogs.com/mukekeheart/p/5700757.html