1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正。
2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽。
*************************************我只是分割线***************************************
上一篇已经讲了一些关于Project目录结构的东西,这次记录一下关于Android四大组件之一的Activity的一些东西,它也是Android中最基本的模块之一。
<一>什么是Activity?
它叫活动(听着很别扭,这么长时间还是感觉不好接受~),几乎所有的活动都是用来与用户交互的,活动主要关注与视图窗体的创建,一个应用程序可以包含零个或者多个活动,但是包含零个活动的应用比较少。【PS:这话是参考别人的,我只是拿来装X】
其实通俗来说,我们可以把手机当做一个浏览器,而Activity就是其中的一个个网页,在Activity上面,我们可以添加不同的View(就是.NET里面所说的控件),并且可以执行一些操作逻辑。
<二>Activity的生命周期
如图【图片是借用别人的】,
Activity的“整个生命周期”是发生在第一次调用onCreate(Bundle)和唯一最后调用onDestroy()方法之间。在onCreate(Bundle)方法中完成活动的初始化操作设置全局状态,比如加载布局、绑定事件等,并在onDestroy()方法释放资源。
Activity的“显示生命周期”是发生在调用onStart()方法以及调用相对应的onStop()方法之间。在这之间,可以在手机屏幕上看到这个活动。随着Activity对用户的可见和不可见状态的改变,这两个方法能被多次调用。
Activity的“前台生命周期”是在onResume()和onPause()方法之间所经历的,在这个周期内,活动处于运行状态,此时的活动是可以和用户进行交互的。
我个人的方法是:创建一个app,然后在Activity的代码中把这些方法全部重写出来,为每个方法打上断点(或者日志输出),Debug进行调试,就基本上明白了什么时候会被调用。
<三>Activity的启动和Activity之间的数据传递
这里我们需要用到一个对象Intent,Intent是Android程序中各组件之间进行交互的一种重要方式,它一般可被用于启动活动、启动服务、以及发送广播等场景,关于它的用法后面再详细说。
1. 简单的启动新的Activity
使用的方法:startActivity(Intent)
示例:
Intent _intent = new Intent(); _intent.setClass(MainActivity.this, ActivityB.class); startActivity(_intent);
//这个调用方法也可以写成
Intent _intent2 = new Intent(MainActivity.this,ActivityB.class);
startActivity(_intent2);
实例化一个Intent对象,然后指定从当前的MainActivity这个活动,跳转到ActivityB这个活动。
2. 启动新的Activity,并有返回值
使用方法:public void startActivityForResult(Intent intent, int requestCode),注意第二个参数:requesCode,这个参数类似于当初特工接头时的暗号,
示例:
1. 应用从活动MainActivity跳转到ActivityC,并请求一个字符串;
2. 在活动Activity中操作,关闭活动ActivityC时,返回请求的字符串给MainActivty;
3.活动MainActivity获取字符串。
class ButtonActivitiesClickListener implements OnClickListener { @Override public void onClick(View v) { if (v.getId() == R.id.btnSkipToC) { Intent _intent = new Intent(); _intent.setClass(MainActivity.this, ActivityC.class); startActivityForResult(_intent, 100); } } }
注意,这里就是启动新的活动ActivityC,暗号requestCode是100。
在活动ActivityC中,点击关闭按钮时用void setResult (int resultCode, Intent data)传回请求的字符串,
class ButtonActivityAListener implements OnClickListener { @Override public void onClick(View v) { if (v.getId() == R.id.btnreturn) { Intent _intent = new Intent(); EditText editText = (EditText) findViewById(R.id.edittext_first); String inputStr = editText.getText().toString(); _intent.putExtra("dashenzaijia", inputStr); setResult(Activity.RESULT_OK, _intent); finish(); } } }
备注:Intent.putExtra(String name, String value)类似于一个数据字典,这个Intent就是ActivityC返回字符串给MainActivity的载体,name就是键,finish()方法类似于winform中的Close();
关闭活动ActivityC后,然后再MainActivity中,有一个虚方法,重载一下,然后从这个方法里面获取ActivityC的返回值,如下:
@Override protected void onActivityResult(int arg0, int arg1, Intent arg2) { // TODO Auto-generated method stub super.onActivityResult(arg0, arg1, arg2); if (arg0 == 100 && arg1 == Activity.RESULT_OK) { String returnValue = arg2.getStringExtra("dashenzaijia"); TextView view = (TextView) this.findViewById(R.id.textview_showresult); if (!returnValue.isEmpty()) { view.setText("来自Activity C的值:" + returnValue); } else { view.setText(null); } } }
第一个参数就是当初定义的两个活动之间的暗号,第二个参数是跳转后页面的关闭时的结果,类似于C# 里面窗体关闭时的DialogResult,第三个参数就是返回值的载体。
关于Activity的最基本的一些知识就说完了。