这几天受一本书的影响学习到了很多有关于App整体框架编写的感悟(这里的框架不是第三方框架,指的是空数据时候的壳)这本书真的很不错,有条件的话,或是真的觉得有必要的话可以来看看,这本书的名字叫做《App研发录》。
1.首先这本书介绍了一种很不错的编程模式,定义BaseActivity来规范代码编写或重建新的生命周期,已达到将公共的代码抽到父类的目的。
BaseActivity代码:
<span style="font-size:18px;">package com.songfeng.baixiaoshength.activity;
import com.icb.Screen.X_ScreenUtil;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
/**
* 基类Activity
* @author WindStory
*
*/
public abstract class BaseActivity extends FragmentActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
X_ScreenUtil.setFullScreen(this);//requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
this.initView(savedInstanceState);
this.initData();
this.initLisenter();
}
/**
* 初始化View
* @param savedInstanceState
*/
protected abstract void initView(Bundle savedInstanceState);
/**
* 初始化Data数据
*/
protected abstract void initData();
/**
* 初始化监听器
* 推荐用 Button.setOnclickLisener()方法来实现
*/
protected abstract void initLisenter();
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
/**
* 跳转Activity页面
*/
public void startActivity(Activity activity,Class<?> cls){
activity.startActivity(new Intent(activity, cls));
}
}
</span>
相对应的子类Activity的代码:
<span style="font-size:18px;">package com.songfeng.baixiaoshength.activity;
import com.songfeng.baixiaoshength.R;
import android.os.Bundle;
/**
* 设置页面
* @author WindStory
*
*/
public class SlideMenu_MySettingsActivity extends BaseActivity{
@Override
protected void initView(Bundle savedInstanceState) {
setContentView(R.layout.activity_settings);
}
@Override
protected void initData() {
}
@Override
protected void initLisenter() {
}
}
</span>
这部分代码很好的封装了生命周期,以及公共的代码,使代码更加规范,还有提供了一种编程思路,抽象类中定义一些方法,当程序维护加新功能的时候,只要在抽象类中直接添加即可,这样实现了分离的感觉。
2.关于OnclickListener的书写
平时很喜欢用接口 implements OnClickListener,再实现其方法来实现监听的方法,一种好的建议是使用 组件.setOnClickListener 来实现监听书写,这只是一种推荐,好处就是当使用接口的时候,所有堆放的R.id.XXXX看起来不是很方便,不如后者可读性上面更好一点。
3.注意细节问题
在json数据解析的过程中,接口后台人员不可能保证所有的数据都不为空,所以这里有种思路就是当解析的数据为空时候,为其指定一个值,这样就可以达到不为空,并且可以判断了。
大致这几点需要注意,书里还有很多关于Crash的分析,这里不再介绍,后面书中封装了网络请求,但是我觉得不如直接用现有的框架比较好,除此之外,我分享下我写整体框架的时候的一些经验。
1.使用butterknife框架来简化书写
使用注释型的butterknife来编写省去了书写findViewById的麻烦,但是有些地方还是免不去写一些findId,不过使用后确实省了不少事情。
2.封装项目中经常使用的方法
随着项目不断的开发,一些经常在项目中的方法,可以封装成一个工具类库,来简化每次都要写同样代码的蛋疼,同时,在学习封装方法的时候,你会接触到很多的新东西。
3.老生常谈的命名规范
我主张的还是最好用英文,全部用英文,否则就全部都用拼音,不过很多情况下,很多人喜欢使用拼音+英文这种,但是我觉得这种写法有点酸爽。。,为了标准我觉得还是全部英文比较好,其次一些注意事项做了很多年开发的大牛我就不说了,这里有一个链接,如果不明白的话可以看一看。
http://blog.csdn.net/vipzjyno1/article/details/23542617
除此之外,可能有些功能有些Activity是同一个xml中的,比如侧滑菜单中的组件,组件中可能会有一些选项跳到其他页面中,像这种同一个组建下的跳转的目标Activity或是Fragment,我认为为了比较好找,最好在前面加上一些前缀,例如在侧栏里的SettingsActivity可以写成SlidingMenu_SettingsActivity虽然可能命名长了一点,但是Activity一多的话,很快就能找到了,不用再想哪个是侧滑菜单里面的。
4.还有一些需要注意的地方
以前有一个小的总结
http://blog.csdn.net/u011539882/article/details/49471525
这篇文章有时间还会再次总结会。
欢迎大家也来交流,一起学习,或是有什么好的点子好的资源,共同分享。