`

PendingIntent与Intent的区别的理解

阅读更多
以前在学习AlarmManager里面会遇到PendingIntent,我就很迷惑,PendingIntent和Intent的区别是什么呢?我在网上搜索了,但看了许多人的解释还是不理解,今天有看到了PendingIntent的另一种用法,所以我重新理解一遍PendingIntent.不知道是否理解正确,只是把自己的理解写出来,大家一起共同探讨。相信大家都知道Intent是你的意图,比如你想启动一个Activity,就会通过Intent来描述启动这个Activity的某些特点,让系统找到这个Activity来启动,而不是启动别的Activity.StartActivity(intent)就会立即启动这个Activity.而PendingIntent呢?Penging中文意思就是:待定,将来发生或来临。PendingIntent的就的意思就是不是像Intent那样立即发生,而是在合适的时候才会去触发对应的Intent.有人说这个intent不是你的ap来触发而是交给别的ap来触发。你可以看以下的code来理解:
这是在PackageInstaller的代码
private class ClearCacheReceiver extends BroadcastReceiver {
        public static final String INTENT_CLEAR_CACHE = 
                "com.android.packageinstaller.CLEAR_CACHE";
        @Override
        public void onReceive(Context context, Intent intent) {
            Message msg = mHandler.obtainMessage(FREE_SPACE);
            msg.arg1 = (getResultCode() ==1) ? SUCCEEDED : FAILED;
            mHandler.sendMessage(msg);
        }
    }




private void checkOutOfSpace(long size) {
        if(localLOGV) Log.i(TAG, "Checking for "+size+" number of bytes");
        if (mClearCacheReceiver == null) {
            mClearCacheReceiver = new ClearCacheReceiver();
        }
        registerReceiver(mClearCacheReceiver,
                new IntentFilter(ClearCacheReceiver.INTENT_CLEAR_CACHE));
        PendingIntent pi = PendingIntent.getBroadcast(this,
                0,  new Intent(ClearCacheReceiver.INTENT_CLEAR_CACHE), 0);
        mPm.freeStorage(size, pi.getIntentSender());
    }


mPm.freeStorage(size, pi.getIntentSender());

以下是在PackageManagerService的:
public void freeStorage(final long freeStorageSize, final PendingIntent opFinishedIntent) {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.CLEAR_APP_CACHE, null);
        // Queue up an async operation since clearing cache may take a little while.
        mHandler.post(new Runnable() {
            public void run() {
                mHandler.removeCallbacks(this);
                int retCode = -1;
                if (mInstaller != null) {
                    retCode = mInstaller.freeCache(freeStorageSize);
                    if (retCode < 0) {
                        Log.w(TAG, "Couldn't clear application caches");
                    }
                }
                if(opFinishedIntent != null) {
                    try {
                        // Callback via pending intent
                        opFinishedIntent.send((retCode >= 0) ? 1 : 0);
                    } catch (CanceledException e1) {
                        Log.i(TAG, "Failed to send pending intent");
                    }
                }
            }
        });
    }


opFinishedIntent.send((retCode >= 0) ? 1 : 0);在PackageInstaller定义的PendingIntent,在PackageManagerService里面来触发。



分享到:
评论
4 楼 追求幸福 2011-07-06  
h286271819 写道
怎么实现对第三方应用程序的缓存清理啊????

不是很懂你的问题哦!
3 楼 h286271819 2011-07-06  
怎么实现对第三方应用程序的缓存清理啊????
2 楼 追求幸福 2010-11-09  
rmn190 写道
下面没有啦?就这么点干巴巴的代码, 哇呀呀....

朋友,我已经增加了一点点注解,希望对你有帮助。有时候,有些东西是"只可意会不可言传滴"
1 楼 rmn190 2010-11-05  
下面没有啦?就这么点干巴巴的代码, 哇呀呀....

相关推荐

    安卓之 (解决问题)PendingIntent和Intent的区别1

    Intent可以理解为一种消息传递对象,用于在不同组件之间传递行为和数据,而PendingIntent则是Intent的一种封装,增加了权限和身份的概念。 Intent的主要功能是作为Android系统四大组件(Activity、Service、...

    Android中pendingIntent与Intent的深入分析

    在Android开发中,Intent和PendingIntent是两个非常关键的概念,它们在应用程序的组件间通信中起着重要作用。Intent主要用于启动或传递数据给另一个组件,如Activity、Service或BroadcastReceiver,而PendingIntent...

    Android中pendingIntent的深入理解

    当其他应用或系统组件需要执行与该Intent相关的行为时,它们可以通过PendingIntent来安全地访问我们的应用资源,而无需直接持有我们的应用上下文。 **二、PendingIntent的类型** PendingIntent主要分为以下三种类型...

    Android 之 PendingIntent用法介绍

    PendingIntent的生命周期与Intent关联,Intent中的数据(如动作、数据、类别、额外数据)都会影响到PendingIntent。例如,当我们更新Notification的Intent时,如果使用了`FLAG_UPDATE_CURRENT`,那么先前的...

    PendingIntent 使用示例

    对于短信发送,PendingIntent常与BroadcastReceiver结合使用。在Android中,发送短信通常需要一个SMS权限,并且必须通过SmsManager类进行。你可以创建一个Intent,设置ACTION_SENDTO动作和电话号码数据,然后通过...

    博客《详解PendingIntent》对应的有问题的PendingIntent源码

    2. **意图(Intent)**:`PendingIntent`是基于Intent构建的,Intent定义了要执行的操作。当创建`PendingIntent`时,需要提供一个Intent实例,这个Intent包含了操作的目标(如ComponentName)、数据(Uri、Extras等)...

    PendingIntent

    这种设计模式为应用提供了一种安全的方式来与其他组件交互,因为只有拥有PendingIntent的对象才能执行相关的Intent操作。 创建PendingIntent通常涉及以下几个步骤: 1. **创建Intent**:首先,你需要创建一个Intent...

    Android Studio 实验二:Intent的使用

    3. **隐式Intent与Action、Data、Category** 隐式Intent通常用于启动未知组件,例如打开一个URL或者发送短信。你需要设置Intent的Action(例如ACTION_VIEW)、Data(Uri)和Category(例如CATEGORY_BROWSABLE): ...

    android开发范例大全第八章-与Intent接轨

    "android开发范例大全第八章-与Intent接轨"涵盖了大量的实战案例,旨在帮助开发者深入理解和熟练运用Intent。以下是基于这个主题的详细知识点讲解: 1. **Intent的基本概念**:Intent是一种意图声明,表示一个动作...

    Android中PendingIntent的简要介绍.pdf

    与普通的Intent不同,PendingIntent不仅能够跨进程传递,而且能够赋予接收者一定的权限,使其能够在特定情况下执行某些操作,如启动Activity、发送Broadcast或执行Service。 **1. PendingIntent的定义和用途** ...

    自制发送短信程序--SmsManager与PendingIntent类的使用

    `PendingIntent`在Android中是一个非常重要的类,它可以理解为一个待执行的操作。在短信发送场景中,`PendingIntent`用于创建意图(Intent)并将其绑定到广播接收器,以便在特定事件(如短信发送成功或失败)发生时...

    实现可定时响起的闹钟----PendingIntent 与 AlarmManager 的运用

    在闹钟应用中,`PendingIntent`会与一个BroadcastReceiver关联,当闹钟时间到达时,`BroadcastReceiver`会被唤醒并处理闹钟事件。 实现步骤如下: 1. **创建BroadcastReceiver**:首先,我们需要定义一个...

    Android应用源码之Intent1_Intent.zip

    Intent1_Intent.zip中的源码应该包含了关于Intent的实例和使用方法,让我们一起深入探讨Intent在Android应用中的作用、类型、创建与传递、以及常见用法。 1. **Intent的作用** Intent的主要功能是启动一个活动...

    Andriod Intent使用代码举例

    Android Intent是Android系统中用于组件间通信的重要...理解并熟练掌握Intent的使用,对于编写高效、健壮的Android应用程序至关重要。通过阅读提供的"Intent使用代码"文件,可以更深入地了解Intent的具体实现和用法。

    安卓基本知识之Intent学习源代码

    3. 异步Intent:通过使用PendingIntent,可以在后台服务或BroadcastReceiver中安全地执行Intent操作。 总之,Intent是Android应用程序组件间通信的桥梁,理解和熟练使用Intent对于Android开发者来说至关重要。通过...

    AlarmManager、PendingIntent的使用\\附件Home监听十分钟后再次启动应用取消服务

    接着,`PendingIntent`是Android系统的一个特殊意图(Intent),它封装了对另一个应用组件(如Activity、Service或BroadcastReceiver)的操作。`PendingIntent`的主要作用是保护应用程序的隐私,确保只有指定的应用...

    应用源码之7.Intent初级学习.zip

    本资料主要针对Intent的初级学习,涵盖了Intent的基本概念、创建方法以及常见用途,旨在帮助初学者理解和掌握这一关键知识点。 Intent主要分为显式Intent和隐式Intent两种类型。显式Intent通过指定Component(如...

    android 自制发送短信程序 SmsManager与PendingIntent对象

    在Android平台上,开发一款能够发送短信的应用程序是常见的需求,这涉及到对SmsManager和PendingIntent对象的理解和使用。这两个核心组件是实现Android系统中短信发送功能的关键。 首先,我们来详细了解一下...

    Android Intent

    2. **Intent构造与属性** - 创建Intent时,可以通过`Intent(Context packageContext, Class&lt;?&gt; cls)`构造显式Intent,或使用`Intent(action, uri)`创建隐式Intent。 - Intent有多个关键属性,如Action(操作)、...

Global site tag (gtag.js) - Google Analytics