活动Activity
一:创建并注册活动
有两种方法,需要注意:任何Activity都需要在AndroidManifest.xml中注册。
方法一:
在eclipse中选择package----右键----new---other----Android—
--AndroidActivity,一路next,只需填写Activity类名和对应的布局名即可。
方法二:
1.建立一个类继承Activity,并复写onCreate方法。
2.建立一个Android xml
3.setContentView(R.layout.activity_second);将xml和activity
关联起来。
4. 在AndroidManifest.xml中注册该Activity:
<activity
android:name="com.example.csdn_asynctask.MainActivity"
</activity>
如需指定该Activity为主Activity,需在<activity>标签之间加上:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
二:在Activity中
1. 隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
2.使用Toast
Toast.makeText(SecondActivity.this, "image successfully !", Toast.LENGTH_LONG).show();
参数一:Toast要显示的上下文环境,Activity本身就是上下文
参数二:Toast要显示的文字
参数三:Toast显示的时间长短
3.创建menu:
1.在res—menu建立main.xml,(根标签是<menu>)输入:
<item android:id = “@+id/add_item” android:title = “Add” />
<item android:id = “@+id/remove_item” android:title =
“Remove” />
2. 重写:onCreateOptionMenu(Menu menu){
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
返回true:允许将创建的菜单显示出来。
3. 重写onOptionsItemSelected(MenuItem item){
Switch(item.getItemId()){
case R.id.add_item:
Toast.maketText(this,“click add”,Toast.LENGTH_SHORT);
Break;
}
}
通过item.getItemId()获取被点击的item菜单
4.销毁Activity
点击back按钮或者调用finish();方法
三:多个Activity跳转之Intent
1. 显式Intent
分为以下步骤:
1.1 创建Intent:
Intent intent = new Intent(FirstActivity.this, Second-
Activity.class);
参数一:启动活动的上下文
参数二:要启动的目标活动
1.2 启动Activity
startActivity(intent);
2.隐式Intent.
2.1 隐式Intent启动Activity
1. 创建一个带action的intent:
Intent intent = new Intent(“com.bupt.MY_ACTION”);
2. 给Intent添加category,也可以不添加,系统会默认添加一个:
intent.addCategory(“com.bupt.MY_CATEGORY”);
3. 在AndroidManifest.xml里,需要启动的Activity标签之间
嵌入:
<intent-filter>
<action android:name = “com.bupt.MY_ACTION” />
<category android:name = “android.intent.category.
DEFAULT” /> <!—这个category是必须的-->
<category android:name = “com.bupt.MY_CATEGORY”/>
</intent-filter>
通过这三部就可以用隐式Intent启动Activity了。
2.2 隐式Intent启动其他程序的活动
和隐式Intent启动Activity一样,需要指定特定的action和data
如:启动一个网页:
1. Intent intent = newIntent(Intent.ACTION_VIEW);
2. intent.setData(Uri.parse(“http://www.baidu.com”));
Uri.parse将一个字符串解析成Uri对象
3. startActivity(intent);
还可以在<intent-filter>中指定<data>标签,让Activity与
Intent紧密连接起来。如:<dataandroid:scheme=”http” />
打电话:
1. Intent intent =new Intent(Intent.ACTION_DIAL);
2.intent.setData(Uri.parse(“tel:10086”));
3.startActivity(intent);
3.启动Intent并携带数据
在FirstA中发送数据
String data_value = “this is a test string”;
Intent intent = new Intent(FirstA.this, SecondA.class);
intent.putExtra(“data_key”, data_value)
startActivity(intent);
在SecondA中接收数据:
Intent intent = getIntent();
String data_value = intent.getStringExtra(“data_key”);
4.返回数据给上一个Activity
1. 在FirstA里触发intent
Intent intent = new Intent(FirstA.this, SecondA.class);
startActivityForResult(intent, 1); // param 2: request code
2. 在SecondA中将计算结果反回
Intent intent = new Intent();// 这个Intent只为传递数据
Intent.putExtra(“result”, “this is Result”);
setResult(RESULT_OK, intent); //专门用于向上一个活动返回数据
finish(); // 销毁当前活动
3. 在FirstA重写onActivityResult接收返回结果
onActivityResult(intrequestCode,int resultCode,Intent data){
switch(requestCode){
case 1 :
if(resultCode == RESULT_OK) //取出data里的数据
break;
}
}
四. Activity的生命周期
概述:Android用任务(Task)管理Activity,一个任务是存放在栈里的活动集合。默认时,每当创建新活动都会入栈,并处于栈顶;按下back或者finish()时,栈顶活动会出栈,前一个入栈的活动重新处于栈顶;系统总是显示处于栈顶的活动给用户。
活动(Activity)有四个状态:
1.运行态:栈顶
2.暂停态:非栈顶,但可见
3.停止态:不在栈顶,且不可见
4.销毁态:从返回栈移除后
活动生命周期:
1.onCreate onDestory : 完整生命周期
2.onStart onStop :可见生存期
3.onResume onPause :前台生存期
4.onRestart
如果先启动AActivity,再启动BActivity,这时AActivity被回收了,在BActivity按下back或finish,会重新调Aactivity的onCreate方法,这时AActivity的数据会丢失。有一个方法可以再销毁AActivity前保存其数据,并在Aactivity的onCreate方法中进行恢复。
Activity回收前会调用onSaveInstanceState(BundleoutState),将临时数据保存在ousState中。
onCreate(BundlesaveInstanceState)方法中saveInstanceState一般为null,当调用了onSaveInstanceState(Bundle outState)时,saveInstanceState就存有outState的数据,可进行恢复。
五. 活动的启动模式:
1.standard(默认):每启动一个新的Activity就会在返回栈入栈,并处于栈顶,系统不在乎这个Activity是否在栈中或栈顶,每次都会创建该活动新实例。
2.singleTop:启动活动时,如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不再创建新实例。
3.singleTask:整个应用程序上下文只有一个实例。每次启动活动,系统先在返回栈中检查是否存在该活动的实例,如果发现,则直接使用它,并把他之上的所有活动统统出栈。,如果没有,则创建新活动。
4.singleInstance:会启动一个新的返回栈来管理这个活动
最佳实践:
1.创建BaseActivity基类,定义List<Activity>将addActivity(),
removeActivity(),finishAllActivity()方法写在里面
2.让各个Activity集成BaseActivity,自动完成addActivity等功能。