一、四大组件
1、Activity(View)
注:向用户展示界面,并且和用户进行交互的界面,用户进行触摸,点击等操作
(一)生命周期:
(1)Activity启动时生命周期
(2)Activity进行切换的生命周期生
(3)点击Back键返回的生命周期
(二)启动模式:
注:activity有四种启动模式如下:
(1)standard(标准模式)
注:遵循后进先出,先进后出的模式,最后进栈的先出栈系统不会进行判断这个Activity是否存在于栈中,每次启动都会先创建一个实例,并处于栈顶位置。
(2)singleTop(栈顶复用模式)
注:当启动的Activity位于栈顶时,则不用创建新的实例如果要启动的activity没有位于栈顶时,则重新创建一个新的实例,位于栈顶
(3)singleTask(栈内复用模式)
注:在应用程序中有且只有一个实例每次启动时都会检查栈中是否存在该Activity实例,如果已经存在则直接使用实例,并将当前activity之上的所有Activity出栈,如果没有发现则创建一个新的实例
(4)singleInstance(启动新的任务栈)
注:如果一个应用系统中都只有一个实例,会启动一个新的任务站不管从哪个任务栈中启动,只会创建一个Activity实例,并且会使用一个全新的的任务栈来装载该Activity。
两种情况如下:1、如果要启动的activity不存在,系统会创建一个新的任务栈,再创建该Activity实例,并把它加入到栈顶:如图
2、如果要启动的activity已经存在,无论位于哪个应用程序或者哪个任务栈中,系统都会把该activity所在的任务栈转到前台,从而显示该activity
2、Service(服务)
(一)生命周期:
(1)直接开启startService()开启,使用stopService()关闭
注:strat启动的服务,调用者退出后service仍然存在,start和stop只能开启和关闭服务,无法操作service
(2)绑定开启bindService(),使用unbindService()解绑,绑定开启,解绑结束
注:bind开启的服务,bind和unbind可以操作service,调用者退出后随调用者销毁
(二)启动服务:
注:若一个startService()启动多次,则oncreat()只调用一次
(1)四个手动调用方法
(2)五个自动调用方法
注:*整个生命周器内,只有startCommand()能被多次调用,其他方法只能调用一次(只能绑定和解绑一次)
*绑定后没有解绑,无法使用stopService()停止
*若已onCreate(),则startService()只调用startCommand()*若bindService()开启,则调用unbindService()时就会自动调用onDestory()销毁
3、Broadcast Receiver(广播)
注:是一个全局的监听器,作用就是监听app并作出响应
(一)广播的概念:
系统在产生某个事件时发送广播,应用程序使用广播接收者接受这个广播,就知道系统产生了什么事件。
系统在运行中,会产生很多事件:开机,关机,打电话,发短信,电量改变等
(二)广播的两种类型
(1)有序广播:
所有跟广播intent匹配的广播接收者都可以接收到广播,但是会按照广播接收者的优先级来决定接受者的先后顺序,优先级定义:-1000~1000
(2)无序广播:
所有跟广播intent匹配的广播接收者都可以接收到广播,没有先后顺序(同时收到)
(三)两种注册方式
(1)动态注册
注:需要在代码中动态指定广播地址并注册,通常在Activity和service中注册广播。但是在activity和service进行销毁的时候一定要进行解除注册,否则系统会报一个异常,故在onDestory()中进行解绑
*封装广播类
public class BootBroadcastReceiver {
private static BootBroadcastReceiver receiver=new BootBroadcastReceiver();
public static BootBroadcastReceiver getInstance(){
return receiver;
}
/** * 注册广播接收者
*
@param activity
* @param broadcastReceiver
* @param filter
*/
public void regiesterReceiver(Context activity, BroadcastReceiver broadcastReceiver, IntentFilter filter){
if (broadcastReceiver!=null) {
activity.registerReceiver(broadcastReceiver, filter);
} }
/** * 注销广播接收者 */
public void unregisterReceiver(Context activity,BroadcastReceiver broadcastReceiver){
if (broadcastReceiver!=null) {
activity.unregisterReceiver(broadcastReceiver);
} }
/** * 发送广播 **/
public void sendBroadCast(Context activity,Intent intent){
activity.sendBroadcast(intent);
}}
*发送广播
/**发送广播*/
Intent intent = new Intent();intent.putExtra("msg",content);
intent.setAction("webscoket_service");
BootBroadcastReceiver.getInstance().sendBroadCast(getActivity(),intent);
MyBroadCastReceiver.class(接SHOU广播)
public class MyBroadCastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String msg=intent.getStringExtra("msg");
ToastUtils.show(msg);
}}
*Activity.class中:
/*** * 接收接收广播 */
MyBroadCastReceiver localReceiver;private void broadcast(){
try { localReceiver=new MyBroadCastReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("webscoket_service");
BootBroadcastReceiver.getInstance().regiesterReceiver(getActivity(),localReceiver,filter);
} catch (Exception e)
{ e.printStackTrace();
}}
@Override
protected void onDestroy() {
//解除注册
BootBroadcastReceiver.getInstance().unregisterReceiver(getActivity(), localReceiver) ;
//注销广播接收者
super.onDestroy();
}
(2)静态注册
注:在清单文件AndroidManifest.xml中进行配置,这种方式的注册时常驻的,当应用关闭后,只要有广播发出,就可以接收到。
*AndroidManifest.xml
*Activity.class中:
Intent intent=new Intent("android.intent.action.MY_STATIC_BROADCAST");
intent.putExtra("msg","hello sttaic receiver");
sendBroadcast(intent);
*MyBroadCastReceiver.class
(接受广播)
public class MyBroadCastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String msg=intent.getStringExtra("msg");
ToastUtils.show(msg);
}}
(四)生命周期(动态注册)
方法描述registerReceiver(broadcastReceiver)注册广播unregisterReceiver(broadcastReceiver)解绑广播sendBroadcast(intent)发送广播
4、Content Provider(内容提供者)
注:封装数据的跨进程传输,使用getContentResolver()拿到ContentResolver进行增删改查contentProvider以一个或多个表(与在关系型数据库中的表类似)的形式将数据呈现给外部应用。行表示提供程序收集的某种数据类型的实例,行中的每个列表示为实例收集的每个数据。
(一)实现方法
注:还有ContentProvider与URI,时间原因,就暂时不写了,见谅见谅