Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android PendingIntent和Intent的區別

Android PendingIntent和Intent的區別

編輯:Android開發實例


       以前在學習AlarmManager裡面會遇到PendingIntent,相信大家都知道Intent是你的意圖,比如你想啟動一個Activity,就會通過 Intent來描述啟動這個Activity的某些特點,讓系統找到這個Activity來啟動,而不是啟動別的 Activity.StartActivity(intent)就會立即啟動這個Activity.而PendingIntent呢?Penging中文意思就是:待定,將來發生或來臨。PendingIntent的就的意思就是不是像Intent那樣立即發生,而是在合適的時候才會去觸發對應的 Intent.有人說這個intent不是你的ap來觸發而是交給別的ap來觸發。你可以看以下的code來理解:

       這是在PackageInstaller的代碼

java代碼:
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);
}
}

java代碼:
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());
}


     以下是在PackageManagerService的:

java代碼:
public void freeStorageAndNotify(final long freeStorageSize, final IPackageDataObserver observer) {
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) {
Slog.w(TAG, "Couldn't clear application caches");
}
} //end if mInstaller

if (observer != null) {
try {
observer.onRemoveCompleted(null, (retCode >= 0));
} catch (RemoteException e) {
Slog.w(TAG, "RemoveException when invoking call back");
}

}
}
});
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved