文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
1.2 为 Activity 定义新的生命周期
学习过设计模式的人,应该对SOLID原则不陌生吧。其中有一条原则就是:单一职责。单一职责的定义是:一个类或方法,只做一件事情。
用这条原则来观察Activity中的onCreate方法,你会发现,这哥们儿怎么干那么多事啊,onCreate中的代码如下所示:
public class LoginActivity extends Activity implements View.OnClickListener { private int loginTimes; private EditText etPassword; private EditText etEmail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); loginTimes = -1; Bundle bundle = getIntent().getExtras(); String strEmail = bundle.getString(AppConstants.Email); etEmail = (EditText) findViewById(R.id.email); etEmail.setText(strEmail); etPassword = (EditText) findViewById(R.id.password); // 登录事件 Button btnLogin = (Button) findViewById(R.id.sign_in_button); btnLogin.setOnClickListener(this); // 获取2个MobileAPI,获取天气数据,获取城市数据 loadWeatherData(); loadCityData(); }
这段代码主要包括三部分逻辑:
·接收从其他页面传递过来的Intent参数。
·加载布局文件,并初始化页面的控件,为控件挂上点击事件方法。
·调用MobileAPI获取数据。
那我们为什么不把onCreate方法拆成三个子方法呢?如图1-5所示。
图1-5 onCreate方法下的三个子方法
对这些子方法介绍如下:
·initVariables:初始化变量,包括Intent带的数据和Activity内的变量。
·initViews:加载layout布局文件,初始化控件,为控件挂上事件方法。
·loadData:调用MobileAPI获取数据。
于是我们在AndroidLib这个类库的BaseActivity中,重写onCreate方法:
public abstract class BaseActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initVariables(); initViews(savedInstanceState); loadData(); } protected abstract void initVariables(); protected abstract void initViews(Bundle savedInstanceState); protected abstract void loadData(); }
同时这三个子方法,要声明为abstract的,从而要求所有子类必须实现这三个方法。
然后我们重写刚才那个Activity的实现,要让所有的Activity都继承自BaseActivity基类,如下所示:
public class LoginNewActivity extends BaseActivity implements View.OnClickListener { private int loginTimes; private String strEmail; private EditText etPassword; private EditText etEmail; private Button btnLogin; @Override protected void initVariables() { loginTimes = -1; Bundle bundle = getIntent().getExtras(); strEmail = bundle.getString(AppConstants.Email); } @Override protected void initViews(Bundle savedInstanceState) { setContentView(R.layout.activity_login); etEmail = (EditText)findViewById(R.id.email); etEmail.setText(strEmail); etPassword = (EditText)findViewById(R.id.password); // 登录事件 btnLogin = (Button)findViewById(R.id.sign_in_button); btnLogin.setOnClickListener(this); } @Override protected void loadData() { // 获取2个MobileAPI,获取天气数据,获取城市数据 loadWeatherData(); loadCityData(); }
对Activity生命周期重新定义是借鉴了JavaScript的做法。JavaScript因为是脚本语言,所以必须要细化每个方法,才能保证结构清晰,不至于写错变量和语法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论