活动(Activity)-- 一种可以包含用户界面的组件,主要用于和用户进行交互。
活动的重要属性:
1.每一个活动都必须要在AndroidManifest文件中进行注册才能生效。
(一)使用Intent跳转到其他活动
显式Intent
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
隐式Intent
在AndroidManifest.xml文件中,对活动进行注册
Intent intent = new Intent("com.hstc.firstdeni,ACTION_START");
startActivity(intent);
(只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent。因为这里我们使用的是默认的category,所以在此处我们不用对其指定,如果是非默认的,这是我们应该使用intent.addcategory("...");方法对其进行指定)
更多隐式Intent的写法
Intent intent = new Intent(Intent.ACTION_VIEW);
itent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
我们指定了action是系统的一个内置的动作,通过Uri.parse()方法,将一个网站字符串解析成一个Uri对象,调用setData方法将其传递进去。此类用法还有很多。
(二)在活动中使用Menu 菜单
需要在活动中重写onCreateOptionMenu()方法,加载布局文件到menu中,并在结果中返回true
布局文件就应该在res资源文件中创建menu文件夹,并创建布局文件main如下
创建menu的点击事件onOptionsItemSelected();
(三)向下一个活动传递数据
在一个活动中发送
String data = "...";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("send_data",data);//此处可以传递的是多种类型,也可以传递的是一个Bundle
startActivity(intent);
在下一个活动中接受
Intent intent = getIntent();//获取发送数据的Intent
String data = intent.getString("send_data");
(四)返回数据给上一个活动
请求返回数据的活动-->>
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);//1--是指定的请求码
我们还需要在该活动中重写这样的方法
(requestCode为请求码,即是我们指定的1,resultCode我们将在返回数据的活动中指定,data为用于返回数据的Intent)
返回数据的intent-->>
Intent intent = new Intent();
intent.putExtra("return_data","Hello,World,again!");
setResult(RESULT_OK,intent);
(五)活动的生命周期(重点理解)
Andorid是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈(Back Stack)。
7个回调方法覆盖活动的生命周期-->>
onCreate();
onStart();
onResume();
onPause();
onStop();
onDestroy();
onRestart();
(启用活动) onCreate();----onStart();----onResume();(另一个活动来到前台,上一个活动还可见)----onPause();(返回上一个活动)----onResume();
(启用活动) onCreate();----onStart();----onResume();(另一个活动来到前台,上一个活动不可见)----onPause();----onStop();(返回上一个活动)----onRestart();----onStart();----onResume();
(启用活动) onCreate();----onStart();----onResume();(销毁活动)----onPause();----onStop();----onDestroy();
(六)活动的启动模式(重点理解)
可以在AndroidManifest中通过给<activity>标签指定android:launchMode属性来选择启动模式
standard:默认的启动模式 每当启动一个新活动,就会在返回栈中入栈,并处于栈顶的位置,不在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例
singleTop:启动活动时如果返回栈的栈顶已经是该活动了,则认为可以直接使用它,不会创建一个新的实例
singleTask;每次启动该活动时系统会在返回栈中检查是否存在该活动的实例,如发现则直接使用该实例,并把在这个活动之上的所有活动出栈,如果没发现则创建一个新的活动实例
singleInstance:指定为该模式的活动会启用一个新的返回栈来管理这个活动
(七)活动的最佳实践
(1)知晓当前是哪一个活动
新建这个一个类,让所有Activity继承自这个类即可
(2)随时随地退出程序
新建一个ActivityCollector类,该类中存在一个ArrayList<Activity> 把oncreate()过的活动add到该集合中,把onDestroy()的活动从该集合中remove,还有一个方法,遍历集合,把所有活动都finish(),从而实现退出程序
(3)启动活动的最佳写法
每一个活动都应该存在这个方法
public static void actionStart(Context context,String data1,String data2){
Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
当其他活动要启动该活动是,即书写方便,又可以直接需要传入哪些参数。