diff options
| author | Dianne Hackborn <hackbod@google.com> | 2015-04-14 18:43:45 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-14 18:43:47 +0000 |
| commit | ca25b8768d1946dbdc3b84fe54b7c4b2888529de (patch) | |
| tree | 8f8a1b58e0616f531140d45e52936ba220d70aea /core/java/android | |
| parent | a08c444d1ded190a4d2189b9fa697b0ffba1f4b4 (diff) | |
| parent | 1e38382b542f5cef9957a89692b02c55a3dd351c (diff) | |
| download | frameworks_base-ca25b8768d1946dbdc3b84fe54b7c4b2888529de.zip frameworks_base-ca25b8768d1946dbdc3b84fe54b7c4b2888529de.tar.gz frameworks_base-ca25b8768d1946dbdc3b84fe54b7c4b2888529de.tar.bz2 | |
Merge "Fixes to idle alarm scheduling, package importance."
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 93 | ||||
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 115 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 11 | ||||
| -rw-r--r-- | core/java/android/os/BatteryStats.java | 10 | ||||
| -rw-r--r-- | core/java/android/service/voice/VoiceInteractionSession.java | 17 | ||||
| -rw-r--r-- | core/java/android/service/voice/VoiceInteractionSessionService.java | 25 |
6 files changed, 224 insertions, 47 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 2b35cd4..51ececc 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -2010,27 +2010,47 @@ public class ActivityManager { public int lastTrimLevel; /** - * Constant for {@link #importance}: this process is running the - * foreground UI. + * Constant for {@link #importance}: This process is running the + * foreground UI; that is, it is the thing currently at the top of the screen + * that the user is interacting with. */ public static final int IMPORTANCE_FOREGROUND = 100; /** - * Constant for {@link #importance}: this process is running something + * Constant for {@link #importance}: This process is running a foreground + * service, for example to perform music playback even while the user is + * not immediately in the app. This generally indicates that the process + * is doing something the user actively cares about. + */ + public static final int IMPORTANCE_FOREGROUND_SERVICE = 125; + + /** + * Constant for {@link #importance}: This process is running the foreground + * UI, but the device is asleep so it is not visible to the user. This means + * the user is not really aware of the process, because they can not see or + * interact with it, but it is quite important because it what they expect to + * return to once unlocking the device. + */ + public static final int IMPORTANCE_TOP_SLEEPING = 150; + + /** + * Constant for {@link #importance}: This process is running something * that is actively visible to the user, though not in the immediate - * foreground. + * foreground. This may be running a window that is behind the current + * foreground (so paused and with its state saved, not interacting with + * the user, but visible to them to some degree); it may also be running + * other services under the system's control that it inconsiders important. */ public static final int IMPORTANCE_VISIBLE = 200; /** - * Constant for {@link #importance}: this process is running something - * that is considered to be actively perceptible to the user. An - * example would be an application performing background music playback. + * Constant for {@link #importance}: This process is not something the user + * is directly aware of, but is otherwise perceptable to them to some degree. */ public static final int IMPORTANCE_PERCEPTIBLE = 130; /** - * Constant for {@link #importance}: this process is running an + * Constant for {@link #importance}: This process is running an * application that can not save its state, and thus can't be killed * while in the background. * @hide @@ -2038,42 +2058,51 @@ public class ActivityManager { public static final int IMPORTANCE_CANT_SAVE_STATE = 170; /** - * Constant for {@link #importance}: this process is contains services - * that should remain running. + * Constant for {@link #importance}: This process is contains services + * that should remain running. These are background services apps have + * started, not something the user is aware of, so they may be killed by + * the system relatively freely (though it is generally desired that they + * stay running as long as they want to). */ public static final int IMPORTANCE_SERVICE = 300; /** - * Constant for {@link #importance}: this process process contains + * Constant for {@link #importance}: This process process contains * background code that is expendable. */ public static final int IMPORTANCE_BACKGROUND = 400; /** - * Constant for {@link #importance}: this process is empty of any + * Constant for {@link #importance}: This process is empty of any * actively running code. */ public static final int IMPORTANCE_EMPTY = 500; /** - * Constant for {@link #importance}: this process does not exist. + * Constant for {@link #importance}: This process does not exist. */ public static final int IMPORTANCE_GONE = 1000; /** @hide */ public static int procStateToImportance(int procState) { - if (procState >= ActivityManager.PROCESS_STATE_HOME) { - return ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND; - } else if (procState >= ActivityManager.PROCESS_STATE_SERVICE) { - return ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE; - } else if (procState > ActivityManager.PROCESS_STATE_HEAVY_WEIGHT) { - return ActivityManager.RunningAppProcessInfo.IMPORTANCE_CANT_SAVE_STATE; - } else if (procState >= ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND) { - return ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE; - } else if (procState >= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) { - return ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE; + if (procState == PROCESS_STATE_NONEXISTENT) { + return IMPORTANCE_GONE; + } else if (procState >= PROCESS_STATE_HOME) { + return IMPORTANCE_BACKGROUND; + } else if (procState >= PROCESS_STATE_SERVICE) { + return IMPORTANCE_SERVICE; + } else if (procState > PROCESS_STATE_HEAVY_WEIGHT) { + return IMPORTANCE_CANT_SAVE_STATE; + } else if (procState >= PROCESS_STATE_IMPORTANT_BACKGROUND) { + return IMPORTANCE_PERCEPTIBLE; + } else if (procState >= PROCESS_STATE_IMPORTANT_FOREGROUND) { + return IMPORTANCE_VISIBLE; + } else if (procState >= PROCESS_STATE_TOP_SLEEPING) { + return IMPORTANCE_TOP_SLEEPING; + } else if (procState >= PROCESS_STATE_FOREGROUND_SERVICE) { + return IMPORTANCE_FOREGROUND_SERVICE; } else { - return ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND; + return IMPORTANCE_FOREGROUND; } } @@ -2253,6 +2282,22 @@ public class ActivityManager { } /** + * Return the importance of a given package name, based on the processes that are + * currently running. The return value is one of the importance constants defined + * in {@link RunningAppProcessInfo}, giving you the highest importance of all the + * processes that this package has code running inside of. If there are no processes + * running its code, {@link RunningAppProcessInfo#IMPORTANCE_GONE} is returned. + */ + public int getPackageImportance(String packageName) { + try { + int procState = ActivityManagerNative.getDefault().getPackageProcessState(packageName); + return RunningAppProcessInfo.procStateToImportance(procState); + } catch (RemoteException e) { + return RunningAppProcessInfo.IMPORTANCE_GONE; + } + } + + /** * Return global memory state information for the calling process. This * does not fill in all fields of the {@link RunningAppProcessInfo}. The * only fields that will be filled in are diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index f63d13c..256d87d 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -106,9 +106,24 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM } } - static public void noteWakeupAlarm(PendingIntent ps, int sourceUid, String sourcePkg) { + static public void noteWakeupAlarm(PendingIntent ps, int sourceUid, String sourcePkg, + String tag) { try { - getDefault().noteWakeupAlarm(ps.getTarget(), sourceUid, sourcePkg); + getDefault().noteWakeupAlarm(ps.getTarget(), sourceUid, sourcePkg, tag); + } catch (RemoteException ex) { + } + } + + static public void noteAlarmStart(PendingIntent ps, int sourceUid, String tag) { + try { + getDefault().noteAlarmStart(ps.getTarget(), sourceUid, tag); + } catch (RemoteException ex) { + } + } + + static public void noteAlarmFinish(PendingIntent ps, int sourceUid, String tag) { + try { + getDefault().noteAlarmFinish(ps.getTarget(), sourceUid, tag); } catch (RemoteException ex) { } } @@ -1375,7 +1390,30 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM data.readStrongBinder()); int sourceUid = data.readInt(); String sourcePkg = data.readString(); - noteWakeupAlarm(is, sourceUid, sourcePkg); + String tag = data.readString(); + noteWakeupAlarm(is, sourceUid, sourcePkg, tag); + reply.writeNoException(); + return true; + } + + case NOTE_ALARM_START_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + IIntentSender is = IIntentSender.Stub.asInterface( + data.readStrongBinder()); + int sourceUid = data.readInt(); + String tag = data.readString(); + noteAlarmStart(is, sourceUid, tag); + reply.writeNoException(); + return true; + } + + case NOTE_ALARM_FINISH_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + IIntentSender is = IIntentSender.Stub.asInterface( + data.readStrongBinder()); + int sourceUid = data.readInt(); + String tag = data.readString(); + noteAlarmFinish(is, sourceUid, tag); reply.writeNoException(); return true; } @@ -2461,6 +2499,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM reply.writeNoException(); return true; } + + case GET_PACKAGE_PROCESS_STATE_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + String pkg = data.readString(); + int res = getPackageProcessState(pkg); + reply.writeNoException(); + reply.writeInt(res); + return true; + } } return super.onTransact(code, data, reply, flags); @@ -3304,7 +3351,7 @@ class ActivityManagerProxy implements IActivityManager data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(stackBoxId); r.writeToParcel(data, 0); - mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -3360,7 +3407,7 @@ class ActivityManagerProxy implements IActivityManager Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(stackId); - mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -3384,7 +3431,7 @@ class ActivityManagerProxy implements IActivityManager Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(listener.asBinder()); - mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -4214,16 +4261,37 @@ class ActivityManagerProxy implements IActivityManager mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0); data.recycle(); } - public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg) + public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(sender.asBinder()); data.writeInt(sourceUid); data.writeString(sourcePkg); + data.writeString(tag); mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0); data.recycle(); } + public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag) + throws RemoteException { + Parcel data = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeStrongBinder(sender.asBinder()); + data.writeInt(sourceUid); + data.writeString(tag); + mRemote.transact(NOTE_ALARM_START_TRANSACTION, data, null, 0); + data.recycle(); + } + public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag) + throws RemoteException { + Parcel data = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeStrongBinder(sender.asBinder()); + data.writeInt(sourceUid); + data.writeString(tag); + mRemote.transact(NOTE_ALARM_FINISH_TRANSACTION, data, null, 0); + data.recycle(); + } public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); @@ -5486,7 +5554,7 @@ class ActivityManagerProxy implements IActivityManager data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(token); values.writeToParcel(data, 0); - mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5499,7 +5567,7 @@ class ActivityManagerProxy implements IActivityManager data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(taskId); data.writeInt(resizeable ? 1 : 0); - mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5513,7 +5581,7 @@ class ActivityManagerProxy implements IActivityManager data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(taskId); r.writeToParcel(data, 0); - mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5545,7 +5613,7 @@ class ActivityManagerProxy implements IActivityManager data.writeInt(1); data.writeBundle(options.toBundle()); } - mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5586,8 +5654,7 @@ class ActivityManagerProxy implements IActivityManager Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(token); - mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, - IBinder.FLAG_ONEWAY); + mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5599,8 +5666,7 @@ class ActivityManagerProxy implements IActivityManager Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(token); - mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, - IBinder.FLAG_ONEWAY); + mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5612,8 +5678,7 @@ class ActivityManagerProxy implements IActivityManager Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(token); - mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, - IBinder.FLAG_ONEWAY); + mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); @@ -5703,10 +5768,24 @@ class ActivityManagerProxy implements IActivityManager data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(userId); data.writeStringArray(packages); - mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); + mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + + @Override + public int getPackageProcessState(String packageName) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeString(packageName); + mRemote.transact(GET_PACKAGE_PROCESS_STATE_TRANSACTION, data, reply, 0); reply.readException(); + int res = reply.readInt(); data.recycle(); reply.recycle(); + return res; } private IBinder mRemote; diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 4a1d6ff..59de281 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -262,7 +262,11 @@ public interface IActivityManager extends IInterface { public void enterSafeMode() throws RemoteException; - public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg) + public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag) + throws RemoteException; + public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag) + throws RemoteException; + public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag) throws RemoteException; public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException; @@ -490,6 +494,8 @@ public interface IActivityManager extends IInterface { throws RemoteException; public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException; + public int getPackageProcessState(String packageName) throws RemoteException; + /* * Private non-Binder interfaces */ @@ -825,4 +831,7 @@ public interface IActivityManager extends IInterface { int DUMP_HEAP_FINISHED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+288; int SET_VOICE_KEEP_AWAKE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+289; int UPDATE_LOCK_TASK_PACKAGES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+290; + int NOTE_ALARM_START_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+291; + int NOTE_ALARM_FINISH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+292; + int GET_PACKAGE_PROCESS_STATE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+293; } diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index c7edb1a..7c5ddee 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -1135,8 +1135,10 @@ public abstract class BatteryStats implements Parcelable { public static final int EVENT_PACKAGE_INSTALLED = 0x000c; // Event for a package being uninstalled. public static final int EVENT_PACKAGE_UNINSTALLED = 0x000d; + // Event for a package being uninstalled. + public static final int EVENT_ALARM = 0x000e; // Number of event types. - public static final int EVENT_COUNT = 0x000e; + public static final int EVENT_COUNT = 0x000f; // Mask to extract out only the type part of the event. public static final int EVENT_TYPE_MASK = ~(EVENT_FLAG_START|EVENT_FLAG_FINISH); @@ -1158,6 +1160,8 @@ public abstract class BatteryStats implements Parcelable { EVENT_USER_FOREGROUND | EVENT_FLAG_START; public static final int EVENT_USER_FOREGROUND_FINISH = EVENT_USER_FOREGROUND | EVENT_FLAG_FINISH; + public static final int EVENT_ALARM_START = EVENT_ALARM | EVENT_FLAG_START; + public static final int EVENT_ALARM_FINISH = EVENT_ALARM | EVENT_FLAG_FINISH; // For CMD_EVENT. public int eventCode; @@ -1789,12 +1793,12 @@ public abstract class BatteryStats implements Parcelable { public static final String[] HISTORY_EVENT_NAMES = new String[] { "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn", - "motion", "active", "pkginst", "pkgunin" + "motion", "active", "pkginst", "pkgunin", "alarm" }; public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] { "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn", - "Esm", "Eac", "Epi", "Epu" + "Esm", "Eac", "Epi", "Epu", "Eal" }; /** diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java index 20d7079..71b7f76 100644 --- a/core/java/android/service/voice/VoiceInteractionSession.java +++ b/core/java/android/service/voice/VoiceInteractionSession.java @@ -20,8 +20,10 @@ import android.app.AssistStructure; import android.app.Dialog; import android.app.Instrumentation; import android.app.VoiceInteractor; +import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Rect; @@ -65,7 +67,8 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; * when done. It can also initiate voice interactions with applications by calling * {@link #startVoiceActivity}</p>. */ -public abstract class VoiceInteractionSession implements KeyEvent.Callback { +public abstract class VoiceInteractionSession implements KeyEvent.Callback, + ComponentCallbacks2 { static final String TAG = "VoiceInteractionSession"; static final boolean DEBUG = true; @@ -855,6 +858,18 @@ public abstract class VoiceInteractionSession implements KeyEvent.Callback { hide(); } + @Override + public void onConfigurationChanged(Configuration newConfig) { + } + + @Override + public void onLowMemory() { + } + + @Override + public void onTrimMemory(int level) { + } + /** * Compute the interesting insets into your UI. The default implementation * sets {@link Insets#contentInsets outInsets.contentInsets.top} to the height diff --git a/core/java/android/service/voice/VoiceInteractionSessionService.java b/core/java/android/service/voice/VoiceInteractionSessionService.java index 008d55f..8f988f3 100644 --- a/core/java/android/service/voice/VoiceInteractionSessionService.java +++ b/core/java/android/service/voice/VoiceInteractionSessionService.java @@ -19,6 +19,7 @@ package android.service.voice; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; import android.os.Bundle; import android.os.IBinder; import android.os.Looper; @@ -76,6 +77,30 @@ public abstract class VoiceInteractionSessionService extends Service { return mInterface.asBinder(); } + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (mSession != null) { + mSession.onConfigurationChanged(newConfig); + } + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + if (mSession != null) { + mSession.onLowMemory(); + } + } + + @Override + public void onTrimMemory(int level) { + super.onTrimMemory(level); + if (mSession != null) { + mSession.onTrimMemory(level); + } + } + void doNewSession(IBinder token, Bundle args, int startFlags) { if (mSession != null) { mSession.doDestroy(); |
