1:什么是活动?
活动(Activity)是一种包含用户界面的组件,主要用于和用户交互。
2:活动的用法?
2.1 手动创建活动
创建项目---》创建包--》创建类(名为FirstActivity)
2.2 创建和加载布局
右击res/layout 目录 ---》New--》Android XML File ,命名为first_layout,布局方式为LinearLayout(线性布局)
2.3 在AndroidManifest文件中注册
注册要放在<application>标签中,android:name 指定注册的是哪个活动,android:lable 活动中的标题内容。
<intent-filter> 标签中的内容,表示这个程序的主活动,点击APP首先打开的活动。
2.4 隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE).加入这句代码。
**一定要在setContentview(R.layout.first_layout),之前。
2.5 在活动中使用Toast
Toast就是消息提醒,比如登录成功,自动消失。
Toast.makeText(FirstActivity.this,"wo shi Toast",Toast.LENGTH_SHORT).show();
第一个参数,Context,上下文。第二个参数,文本内容(要显示的内容)。第三个参数,显示的时长,Toast.LENGTH_SHORT, Toast.LENGTH_LONG
2.6 在活动中使用Menu
2.6.1 在xml中写入代码
<item
android:id="@+id/add_item"
android:title="Add />
<item
android:id="@+id/remove_item"
android:title="Remove" />
2.6.2 打开FirstActivity,重写如下方法:
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().infater(R.menu.main,menu);
return true;
}
通过getMenuInfater()方法得到MenuInfater对象,再调用infater就可创建菜单。其中两个参数,第一个参数,传入的资源,第二个参数,是添加到哪个Menu中。
2.6.3 给菜单设置点击事件,重写如下方法
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.add_item:
Toast.makeText(this,"添加".Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"删除".Toast.LENGTH_SHORT).show();
break;
default;
}
return true;
}
2.7 销毁一个活动
finish();
3:使用Intent
3.1 显示Intent
Intent intent = new Inten(FirstActivity.this,SecondActivity.class);第一个参数,上下文,当前活动,第二个参数,目标活动。
startActivity(intent);
3.2 隐式Intent
在主配置清单中
注册SecondActivity,,在<intent-filter>中加入:
<action android : name = "com.example.activitytest.ACTION_START"/>
<category android : name="android.intent.category.DEFAULT"/>
在逻辑代码中
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
3.3 更多隐式Intent的用法
Intent inten = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(http://www.baidu.com));
startActivity(intent);
3.4 向下一个活动传递数据
第一个Activity:
String data = "我是奔跑的小田";
Intent intent = new Intent (FirstActivity.this,SecondActivity.class);
intent.putExtra("firstdata",data);
startActivity(intent);
第二个Activity:
Intent intent =getIntent();
String data = intent.getStringExtra("firstdata");;
Log.d("SecondActivity",data);
3.5 返回数据给上一个活动
3.5.1 startActivityForResult()方法,第一个参数是Intent,第二个参数是请求码。(请求码是一个唯一的值)
3.5.2 SecondActivity中:
Intent intent = new Intent();
intent.putExtra("firstdata","我是奔跑的小田");
setResult(RESULT_OK,intent);
finish();
setResult()方法有两个参数,第一个是处理结果,第二个是把带数据的Intent传递回去。
3.5.3 销毁活动会回调上一个活动,onActivityForResult()方法,在第一个Activity中重写这个方法:
switch(requestCode){
case 1:
if(resultCode==RESULT_OK){
String returnData = data.getStringExtra("firstdata");
Log.d("FirstActivity",returnData);
}
break;
default:
}}
**** onActivityForResult()方法,有三个参数,第一个参数,requestCode启动活动传入的请求码,第二个参数resultCode返回数据时传入的结果处理,第三个参数,数据data
4:活动的生命周期:
4.1 返回栈:Android使用任务来管理活动,栈是一种后进先出的数据结构,销毁一个活动,就会显示栈顶的活动。
4.2 活动的状态:
4.2.1 运行状态:
活动处于栈顶就是运行状态。
4.2.2 暂停状态:
不是栈顶,但可见就是暂停状态。比如:对话框
4.2.3 停止状态:
当一个活动不再处于栈顶,不可见,就是停止状态。
4.2.4 销毁状态:
从返回栈移出时,就是销毁状态。
4.3 活动的生存期(七个方法)
onCreate()做一些初始化的操作,比如:加载布局,绑定事件。
onStart()活动由不可见变可见时调用。
onResume()于用户交互的时候调用。
onPause()暂停
onStop()不可见时调用
onDestory()销毁时调用
onRestart()再次启动的时候调用
4.4 活动被回收了怎么办?
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据。
5:活动的启动模式:
5.1 standard (默认模式) 每次启动都会创建一个新的实例。
5.2 singleTop (栈顶模式) 启动活动,如果栈顶有该活动那么直接使用。
5.3 singleTask (栈内模式) 启动活动,如果发现栈内有该活动,直接用,没有再创建。
5.4 singleInstance (返回栈) 创建独立的活动。
6:活动的最佳实践
6.1 知道当前是哪一个活动?
新建BaseActivity继承自Activity,重写onCreate方法
Log.d("BaseActivity",getClass().getSimpleName());
6.2 随时随地退出程序
新建一个ActivityCollector类作为活动管理器。
public class ActivityCollector{
public static List<Activity> activities = new ArrayList<Activity>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for(Activity activity : activities){
if(!activity.isFinishing()){
activity.finish();
}
}
}
}
接下来:
public class BaseActivity extends Activity{
onCreate()方法中:
Log.d("BaseActivity",getClass().getSimpleName());
ActivityCollector.addActivity(this);
}
onDestory()方法中
ActivityCollector.removeActivity(this);
退出多个程序:
public class ThirdActivity extends BaseActivity{
button.setOnClickListener(new OnClickListener()
public void onClick(View v){
ActivityCollector.finishAll();
}}
6.3 启动活动的最佳写法
public class SecondActivity extends BaseActivity {
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);
}
}
button.setOnClickListener(new OnClickListener()
public void onClick(View v){
SecondActivity.actionStart(FirstActivity.this,"data1","data2");
}}
2016年10月7日,21.19分,耗时2小时。