Android 中的四大布局:

1Activity 2 广播接收者(broadCastRevceiver) 3服务(Service) 4内容提供者(contentprovider)

##01_AndroidManifest文件中的几个细节t

结论:
1、一个应用程序可以创建多个桌面图标
2、创建快捷图标的方法:
<intent-filter>
//应用程序的入口
<action android:name="android.intent.action.MAIN" />
//启动器
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
3、activity的label标签的值就它的界面的标题
4、activity的label标签的值就它的桌面快捷图标的名称

5、application中的label标签和activity中的label标签不是一个概念,application中的label表示应用程序的名称,activity中的label标签表示的是它的界面的名称。


action:动作 可以自定义,可以使用系统定义
category:类型
android.intent.category.LAUNCHER 启动器,DEFAULT 默认类型,一般都是使用这个默认类型,
android.intent.category.CAR_DOCK、android.intent.category.CAR_MODE 车载电脑使用的模式,android.intent.category.TV


##02_意图设置动作激活新的界面(重点)
Intent 意图:做一件事情的想法。
吃饭,打人,喝茶
动作:action
数据:data

intent的作用:激活组件和携带参数。

跳转的步骤:
//创建一个意图对象
Intent intent = new Intent();
//目标activity在配置文件配置的action的值
intent.setAction("android.intent.action.SECONDSHOW");
//使用目标activity在配置文件配置的data的scheme
intent.setData(Uri.parse("itheima://sdfdslkjk"));

//使用目标activity在配置文件配置的data的category
intent.addCategory("android.intent.category.DEFAULT");

//开启一个activity,跳转到另一个activity的界面上
startActivity(intent);

在第二activity中得到第一个activity传过来的intent:

Intent intent = this.getIntent();
Uri uri = intent.getData();

##03_意图设计的目的

意图设计的目的:解耦,实现应用程序的高内聚、低耦合。保证应用程序之间能够相互独立运行,又能彼此相互调用。

保证自己写代码能够重复使用。
架构师:保证项目 多快好省的把项目做完。


##04_隐式意图和显式意图(重点)
*隐式意图:开启activity的时候不需要直接指定activity的名称,通过指定一组动作和数据,让系统来找到这个特定的activity。

应用场景:

1、让外部应用程序开启自己应用程序里面的activity;

2、开启外部应用程序的activity;

代码:

//创建一个意图对象
Intent intent = new Intent();
//目标activity在配置文件配置的action的值
intent.setAction("android.intent.action.SECONDSHOW");
//使用目标activity在配置文件配置的data的scheme
intent.setData(Uri.parse("itheima://game=天天酷跑"));
intent.addCategory("android.intent.category.DEFAULT");

//开启一个activity,跳转到另一个activity的界面上
startActivity(intent);



*显示意图:开启activity的时候直接指定activity的名称;

应用场景:应用程序内部调用。

代码:

Intent intent = new Intent(this,SecondActivity.class);
//封装数据
//intent.putExtra("name", "itheima");
//intent.putExtra("age", 6);
Bundle b = new Bundle();
b.putString("name", "itheima");
b.putInt("age", 6);
intent.putExtras(b);
startActivity(intent);




##05_意图传递数据(重点)

可以数据类型:
1、8大基本数据类型、数组;
2、Bundle类似于map的数据结构;
3、Parcelable 序列化到内存;
4、Serializable 序列化到文件;

代码:

使用显示意图:

Intent intent = new Intent(this,SecondActivity.class);
//封装数据
//intent.putExtra("name", "itheima");
//intent.putExtra("age", 6);
Bundle b = new Bundle();
b.putString("name", "itheima");
b.putInt("age", 6);
intent.putExtras(b);
startActivity(intent);

使用隐式意图:

//创建一个意图对象
Intent intent = new Intent();

intent.setAction(Intent.action.view);
intent.setData(Uri.parse("tel://"+123);
intent.addCategory("android.intent.category.DEFAULT");

//开启一个activity,跳转到另一个activity的界面上
startActivity(intent);







##06_开启activity获取返回值的步骤(重点)

步骤:
1、在开启activity时调用
//开启一个activity并等待返回结果
startActivityForResult(intent, 200);
2、在目标activity中设置返回的数据
Intent intent = new Intent();
intent.putExtra("username", username);
//设置界面关闭时返回数据
setResult(0, intent);
3、关闭目标activity
//自动关闭界面
finish();
4、重写onActivityResult方法接收返回的数据:

代码:

/**
* requestCode 开启activity时设置的请求吗
* resultCode 在目标activity中设置的结果码
* data 第二个界面返回的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//
//if(resultCode==0){
//String username = data.getStringExtra("username");
//
//Toast.makeText(this, username, 0).show();
//}
//
//if(resultCode==1){
//String thirdInfo = data.getStringExtra("thirdInfo");
//
//Toast.makeText(this, thirdInfo, 0).show();
//}
//
//使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据
if(requestCode==200){
String username = data.getStringExtra("username");

Toast.makeText(this, username, 0).show();
}

if(requestCode==300){
String thirdInfo = data.getStringExtra("thirdInfo");

Toast.makeText(this, thirdInfo, 0).show();
}



}

##07_请求码和结果码的作用(重点)
使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据.

代码:

/**
* requestCode 开启activity时设置的请求吗
* resultCode 在目标activity中设置的结果码
* data 第二个界面返回的数据
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//
//if(resultCode==0){
//String username = data.getStringExtra("username");
//
//Toast.makeText(this, username, 0).show();
//}
//
//if(resultCode==1){
//String thirdInfo = data.getStringExtra("thirdInfo");
//
//Toast.makeText(this, thirdInfo, 0).show();
//}
//
//使用requestCode,resultCode来判断是哪个业务逻辑界面返回的数据
if(requestCode==200){
String username = data.getStringExtra("username");

Toast.makeText(this, username, 0).show();
}

if(requestCode==300){
String thirdInfo = data.getStringExtra("thirdInfo");

Toast.makeText(this, thirdInfo, 0).show();
}

}

##8_activity的生命周期(重点)
1、什么是生命周期:
被生下来、幼年、童年、青年、中年、老年

从被创建到销毁经历几个阶段,每个阶段就表示一个方法,这些方法就是生命周期的回调。



生命周期:

onCreate:在activity被创建的时候调用这个方法,初始化界面。
onStart:当界面可见的时候调用
onResume 按钮可以被点击的时候

onPause 按钮失去焦点的时候:

onStop 界面不可见的时候调用:

onDestroy 销毁activity实例,做一些扫尾工作

1、activity创建时调用onCreate、onStart、onResume;
2、关闭activity时调用:onPause、onStop、onDestroy;
3、最小化activity时调用:onPause、onStop;
4、最小后重新打时调用:onRestart、onStart、onResume;


##9_读文档查看activity的生命周期

##10_横竖屏切换的生命周期(重点)
禁用横竖自适应的方式:

1、screenOrientation:landspace横屏、 portrait竖屏、
横竖屏切换:先销毁当前的activity实例,再创建一个新activity实例。
2、在activity中设置 android:configChanges="orientation|keyboardHidden|screenSize"



##11_任务栈的概念

队列:先进先出
栈:先进后出

任务:打开一个activity界面;

任务栈:
设计任务栈的目的:用来维护用户的体验,记录打开界面和关闭界面的信息。
1、打开一个activity界面表示在栈中存放了一个任务,关闭一个界面表示清除了一个任务;
2、栈里面的任务清除完毕后,应用程序退出;


##12_singletop启动模式

singletop 单一顶部模式 在activity的配置文件中设置android:launchMode="singleTop"
如果任务栈的栈顶存在这个要开启的activity,不会重新的创建activity,而是复用已经存在的activity。保证栈顶如果存在,不会重复创建。
应用场景:浏览器的书签


##13_singletask和singleinstance启动模式
singetask 单一任务栈,在当前任务栈里面只能有一个实例存在
当开启activity的时候,就去检查在任务栈里面是否有实例已经存在,如果有实例存在就复用这个已经存在的activity,并且把这个activity上面的所有的别的activity都清空,复用这个已经存在的activity。保证整个任务栈里面只有一个实例存在

应用场景:浏览器的activity
如果一个activity的创建需要占用大量的系统资源(cpu,内存)一般配置这个activity为singletask的启动模式。webkit内核 c代码

singleInstance启动模式非常特殊, activity会运行在自己的任务栈里面,并且这个任务栈里面只有一个实例存在
如果你要保证一个activity在整个手机操作系统里面只有一个实例存在,使用singleInstance
应用场景: 来电页面有道词典

更多相关文章

  1. android post提交数据到web端
  2. android关闭或开启移动网络数据(关闭后,设备不可以上网,但可以打电
  3. 在设置里面增加关闭和打开GPS ,数据流量的接口
  4. Android开发之与服务器(jsp)发送、接受JSON数据
  5. Android之使用Pull解析Xml数据
  6. android SQLite数据库2
  7. Android 创建SQLite数据库(一)
  8. Android利用wireshark抓取网络数据包
  9. Android 中数据库查询方法 query() 中的 selectionArgs 的用法

随机推荐

  1. Android(安卓)浅析 ButterKnife (一) 使
  2. android按两次后退键退出程序
  3. Android(安卓)studio 报错 Plugin with i
  4. 如何判断android 短信发送(sendTextMessa
  5. android 跳转到系统相册选择图片
  6. android菜单
  7. Android通过ContentProvider获取通话记录
  8. android mina 客户端无法接收信息的原因
  9. android之纵横屏幕切换时保存数据
  10. mac react native android