Activity概述
Activity 是用户交互的窗口,一定要内外兼修,长得漂亮还贤淑。一个字“完美”
一个空白Activity的创建
- 在已有的app中通过Android studio 创建Activity文件
- 创建和加载布局文件
- 在AndroidManifest.xml 中注册
- application
- intent-filter
添加UI组件–example Menu
- res/menu/menu.xml 创建一个menu 布局文件
- java/ActivityFrist.java 加载布局文件onCreatOptionsMenu(R.emnu.menu, menu),并重写onOptionsItemSelected(MenuItem item)
Activity中的Intent通信
Intent是Android程序中各组件进行重要交互方式之一,可以用于启动活动、服务、发送广播等。
Intent 有多个构造函数的重载,其中一个Intent(Context packageContext, Class< ?>cls);
Class< ?>clsJava的一种反射机制.只知道类名就可以得到类信息(无需New)
显式Intent:比较简单,直接制定Intent的两个参数,意图很明显
Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);隐式Intent:通过action和category来过滤想要的意图
过滤配置,需要在AndroidManifest.xml的application注册地方申明过滤的< Intent-filter>属性
<activity android:name=".UiActivity"> <intent-filter> <action android:name="com.examlpe.activity.ACTION_START" /> <category android:name="com.examlpe.activitytest.MY_CATEGORY" /> </intent-filter> </activity>
触发Intent,在Acivity.java中调用intent,category的DEFAULT是默认设置的。
Intent intent = new Intent(“com.examlpe.activity.ACTION_START”);
intent.addCategory(“com.examlpe.activitytest.MY_CATEGORY”);
startActivity(intent);其他隐式Intent用法,具体的扩充请网上查阅,下面简单实例:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(“http://www.baidu.com“));
startActivity(intent);
intent的数据传输:
数据发送:intent通过重载putExtra()传递【name ,data】
发送Activity
SendActivity.java
String data = “Hello SendActivity”;
Intent intent = new Intent(SendActivity.this. ReceiveActivity.class);
intent.putExtra(“extra_data”, data);
startActivity(intent);
接受Activity
ReceiveActivity.java
Intent intent = getIntent();
String data = intent.getStringExtra(“extra_data”);
Log.d(“ReceiveActivity”, data);数据返回 :在操作back按键时,通过startActivityForResult()的方法在活动销毁之前返回一个结果。
FirstActivity
startActivityForResult(Intent intent, value);
Intent intent = new Intent(FirstActivity.this. SecondActivity.class);
startActivityForResult(intent ,1); //请求码只要唯一,这里传入1重写此函数处理请求码操作
@ Override //
protected void onActivityResult( int requestCode , int resultCode, Intent data) {
switch (requestCode) {}
}
SecondActivity
Intent intent = new Intent();
intent.putExtra(“data_return”, “Hello”);
setResult(RESULT_OK, intent);
finish();
Activity的生命周期
Activity回收时数据保存
为了防止在Activity 资源暂停状态时被回收,所以需要在保证在Activity被回收之前,通过onSaveInstanceState(Bundle outState)回调方法,来保存数据。
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
String tempData = “Something you just typed”;
outState.putString(“data_key”, tempData);
}
@Override
protect void onCreat(Bundle savedInsdtanceState) {
super.onCreate(saveInsdtanceState);
……
if(saveInstanceState != null){
String tempData = saveInstanceState.getString(“date_key”);
Log.d(TAG,tempDate);
}
}
Activity启动模式
通过修改Androidmanifest.xml 中< activity>标签指定android:launchMode属性来启动模式
1.1 standard : 默认的启动模式,每次启动都会创建新的Activity栈。
1.2 singleTop :在启动活动时,如果发现返回栈顶是已经是该活动,就直接使用,不创建新的栈。
1.3 singleTask :在启动活动时,会检测返回栈中是否存在此实例,如果存在,就不创建新栈
1.4 singleInstance :在活动中创建一个新的返回栈,来管理这个活动,使得不论那个应用访问这个活动,都公用一个返回栈,实现共享活动的实例。