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

这几天受一本书的影响学习到了很多有关于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

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

 

欢迎大家也来交流,一起学习,或是有什么好的点子好的资源,共同分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值