您的位置:首页 > 移动开发

【App框架】有关App框架的编写感悟

2015-11-17 12:01 519 查看
这几天受一本书的影响学习到了很多有关于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.老生常谈的命名规范

我主张的还是最好用英文,全部用英文,否则就全部都用拼音,不过很多情况下,很多人喜欢使用拼音+英文这种,但是我觉得这种写法有点酸爽。。,为了标准我觉得还是全部英文比较好,其次一些注意事项做了很多年开发的大牛我就不说了,这里有一个链接,如果不明白的话可以看一看。

/article/1970422.html

除此之外,可能有些功能有些Activity是同一个xml中的,比如侧滑菜单中的组件,组件中可能会有一些选项跳到其他页面中,像这种同一个组建下的跳转的目标Activity或是Fragment,我认为为了比较好找,最好在前面加上一些前缀,例如在侧栏里的SettingsActivity可以写成SlidingMenu_SettingsActivity虽然可能命名长了一点,但是Activity一多的话,很快就能找到了,不用再想哪个是侧滑菜单里面的。

4.还有一些需要注意的地方

以前有一个小的总结

/article/8665337.html

这篇文章有时间还会再次总结会。

欢迎大家也来交流,一起学习,或是有什么好的点子好的资源,共同分享。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: