PendingIntent待定意图

PendingIntent(待定意图)是Android提供的一种外部程序调起自身程序的能力,生命周期不与主程序相关

PendingIntent如果未cancel(),即使App关闭,也会继续存在。

外部程序通过PendingIntent只能调起三种组件:ActivityServiceBroadcast

PendingIntent的使用场景有三个:

(1)使用AlarmManager设定闹钟

(2)在系统状态栏显示Notification

(3)在桌面显示Widget

PendingInent静态方法获取:

(1)用于发送广播的PendingIntent

PendingIntent.getBroadcast( Context context , int requestCode Intent intent , int flags )

(2)用于启动Activity的PendingIntent

PendingIntent.getActivity( Context context int requestCode , Intent intent , int flags )

PendingIntent.getActivity( Context context , int requestCode , Intent intent , int flags , Bundle options )

(3)用于启动服务

PendingIntent.getService( Context context , int requestCode , Intent intent , int flags )

当PendingIntent在日后被激发时,将依照第三个参数Intent意图,执行发送广播、启动Activity、启动Service

PendingIntent是系统对于待处理数据的一个引用,称之为 token当主程序被 killed 时,token还是会继续存在的,可以继续供其他进程使用;如果要取消PendingIntent,需要调用PendingIntent的cancel方法

当两个PendingIntent的 requestCode请求码Intent的action、data、category属性 相同,则两个PendingIntent为同一个

PendingIntent的第四个参数(int flags):设置多个FLAG用|分隔

(1) int FLAG_CANCEL_CURRENT

如果新请求的PendingIntent发现已存在时,取消已存在的,用新的PendingIntent替换

(2) int FLAG_NO_CREATE

如果新请求的PendingIntent发现已存在时,忽略新请求的,继续使用已存在的,日常开发中很少使用。 

(3) int FLAG_ONE_SHOT

表示PendingIntent只能使用一次如果已使用过,那么 getXXX(...) 将返回NULL

(4) int FLAG_UPDATE_CURRENT 【常用】

如果新请求的PendingIntent发现已存在时,如果Intent有字段改变了,Extra,这更新已存在的PendingIntent

(5) int FLAG_IMMUTABLE【常用】 FLAG_MUTABLE

在Android12后,为了安全,必须在FLAG_IMMUTABLE和FLAG_MUTABLE中设置一个。FLAG_IMMUTABLE【常用】表示PendingIntent不可变,他的内容不可修改,推荐使用;FLAG_MUTABLE表示PendingIntent可变,允许修改它的内容。

//例
Intent intent_content = new Intent( context , MainActivity2.class );
PendingIntent pendingIntent = PendingIntent.getActivity( context , 2333 , intent , PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT );
        

你可能感兴趣的:(android,java)