Android学习笔记day_08

一、activity启动模式标准

概念:进程、线程、应用程序、任务栈、启动模式

1)任务栈

记录当前用户操作的行为的一种数据结构,(后进先出的数据结构)
注意:***一个应用程序默认是一个应用栈,特俗情况:在singleinstance会有多个任务栈***

2)进程

Android系统,应用程序退出和进程退出是两个不同的概念
Android系统为了让应用程序可以被快速的开启,所有的应用程序退出后,进程是不会退出的,只有当系统的内存空间严重不足的时候才会把进程回收

点击图标 ---->Linux创建进程 ---->dalvik虚拟机 ---->读取清单文件,加载activity

3)线程

进程是操作系统分配内存控件的单位,每个进程的内存空间都是独立的,线程是运行在进程里面的,线程是cpu执行的最小单位,进程销毁线程也就没了

4)应用程序

Android应用程序:每个应用程序都是运行在sandbox(沙箱)由进程管理,可以理解为组件activity、service、content provider、broadcastreceiver的组合

5)启动模式(launchMode)

1.standard 标准的启动模式
一个activity默认就是标准的启动模式,开启新的activity,activity就会被创建出来加入到任务栈的栈顶,适用于绝大多数的应用场景
2.singleTop启动模式
单一顶部启动模式,如果发现一个activity启动过并且在任务栈的栈顶,就不会被再次重新创建。主要是解决用户体验,避免重复打开已经打开的界面

在同一个任务栈里可以有多个实例存在

3.singleTask 单一任务栈启动模式
开启新的activity回去检查是否有activity的实例存在,如果存在就直接清空这个实例上面的所有activity,服用这个已经存在的实例

在同一个任务栈里面只有一个实例存在
懒得写了截图下来

singleinstance 单一实例
类似与Java中的单例模式、单态模式。在整个Android手机操作系统里面只有一个activity的实例存在
singleinstance 启动模式的activity运行在自 **单独** 的任务栈里面
应用场景:如果希望一个activity,在整个手机操作系统只有一个实例存在,通话的时候就是采用这个,只允许一个电话接入

*任务栈的id为int类型的整数,自增长的id*

二、广播接收者BroadcastReceiver

例如电池电量不足、手机开机成功都会广播一条消息

1)使用内置的广播接收者

1.创建一个类继承broadcastreceiver
2.配置广播接收者

 <receiver android:name="com.example.broadcastreceiver.IpBroadcastReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            </intent-filter>
  </receiver>

3.特殊的广播接收者需要添加权限

2)如何自定义对外发送接收广播消息

1.建立广播发送者:
1. 创建意图intent
2. 设置广播动作
3. 设置发送数据
4. 发送广播

public void click(View v){
		Intent intent = new Intent();
		intent.setAction("com.example.broadcastsender.haha");
		intent.putExtra("data", "123456789+");
		sendBroadcast(intent);
	}

2.建立广播接收者
1. 在接收的Android工程里面创建接收类继承BroadcastReceiver实现onReceive方法

public class MyReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		String data = intent.getStringExtra("data");
		System.out.println("接收到的数据为:"+data);
	}

}

  1. 在清单配置文件里面配置好接收者
<receiver android:name="com.example.broadcastreceiver.MyReceiver">
            <intent-filter >
                <action android:name="com.example.broadcastsender.haha"/>
            </intent-filter>
        </receiver>
  1. 通过intent.getStringExtra(“data”);获取发送者发送的数据

3)广播事件类型

1. 无序广播

 广播发送的时候,接收者接收没有先后顺序

2.有序广播

广播发送接,接收者按照优先级,先后顺序接收的,优先级priority从1000到-1000,数字越大优先级越高,0是默认的优先级
设置优先级priority

4)屏幕锁屏和解锁的广播接收者

这是一组特殊的广播事件,接收这些事件采用清党文件mainifest.xml配置不生效,要用代码的方式注册才会生效
如果这个广播事件经常发生,一般不允许采用清单注册,采用代码在oncreate()注册,好处就是程序运行生效,程序不运行失效,省电
在这里插入图片描述

需求:希望片面锁屏解锁的广播接收长期生效,即使应用程序退出也能接收到广播消息
这就得把广播方法服务里面了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值