• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app;
18 
19 import android.content.ComponentName;
20 import android.content.Intent;
21 import android.content.IIntentReceiver;
22 import android.content.pm.ActivityInfo;
23 import android.content.pm.ApplicationInfo;
24 import android.content.pm.ProviderInfo;
25 import android.content.pm.ServiceInfo;
26 import android.content.res.CompatibilityInfo;
27 import android.content.res.Configuration;
28 import android.os.Binder;
29 import android.os.Bundle;
30 import android.os.Debug;
31 import android.os.Parcelable;
32 import android.os.RemoteException;
33 import android.os.IBinder;
34 import android.os.Parcel;
35 import android.os.ParcelFileDescriptor;
36 
37 import java.io.FileDescriptor;
38 import java.io.IOException;
39 import java.util.HashMap;
40 import java.util.List;
41 import java.util.Map;
42 
43 /** {@hide} */
44 public abstract class ApplicationThreadNative extends Binder
45         implements IApplicationThread {
46     /**
47      * Cast a Binder object into an application thread interface, generating
48      * a proxy if needed.
49      */
asInterface(IBinder obj)50     static public IApplicationThread asInterface(IBinder obj) {
51         if (obj == null) {
52             return null;
53         }
54         IApplicationThread in =
55             (IApplicationThread)obj.queryLocalInterface(descriptor);
56         if (in != null) {
57             return in;
58         }
59 
60         return new ApplicationThreadProxy(obj);
61     }
62 
ApplicationThreadNative()63     public ApplicationThreadNative() {
64         attachInterface(this, descriptor);
65     }
66 
67     @Override
onTransact(int code, Parcel data, Parcel reply, int flags)68     public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
69             throws RemoteException {
70         switch (code) {
71         case SCHEDULE_PAUSE_ACTIVITY_TRANSACTION:
72         {
73             data.enforceInterface(IApplicationThread.descriptor);
74             IBinder b = data.readStrongBinder();
75             boolean finished = data.readInt() != 0;
76             boolean userLeaving = data.readInt() != 0;
77             int configChanges = data.readInt();
78             schedulePauseActivity(b, finished, userLeaving, configChanges);
79             return true;
80         }
81 
82         case SCHEDULE_STOP_ACTIVITY_TRANSACTION:
83         {
84             data.enforceInterface(IApplicationThread.descriptor);
85             IBinder b = data.readStrongBinder();
86             boolean show = data.readInt() != 0;
87             int configChanges = data.readInt();
88             scheduleStopActivity(b, show, configChanges);
89             return true;
90         }
91 
92         case SCHEDULE_WINDOW_VISIBILITY_TRANSACTION:
93         {
94             data.enforceInterface(IApplicationThread.descriptor);
95             IBinder b = data.readStrongBinder();
96             boolean show = data.readInt() != 0;
97             scheduleWindowVisibility(b, show);
98             return true;
99         }
100 
101         case SCHEDULE_SLEEPING_TRANSACTION:
102         {
103             data.enforceInterface(IApplicationThread.descriptor);
104             IBinder b = data.readStrongBinder();
105             boolean sleeping = data.readInt() != 0;
106             scheduleSleeping(b, sleeping);
107             return true;
108         }
109 
110         case SCHEDULE_RESUME_ACTIVITY_TRANSACTION:
111         {
112             data.enforceInterface(IApplicationThread.descriptor);
113             IBinder b = data.readStrongBinder();
114             boolean isForward = data.readInt() != 0;
115             scheduleResumeActivity(b, isForward);
116             return true;
117         }
118 
119         case SCHEDULE_SEND_RESULT_TRANSACTION:
120         {
121             data.enforceInterface(IApplicationThread.descriptor);
122             IBinder b = data.readStrongBinder();
123             List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
124             scheduleSendResult(b, ri);
125             return true;
126         }
127 
128         case SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION:
129         {
130             data.enforceInterface(IApplicationThread.descriptor);
131             Intent intent = Intent.CREATOR.createFromParcel(data);
132             IBinder b = data.readStrongBinder();
133             int ident = data.readInt();
134             ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data);
135             Configuration curConfig = Configuration.CREATOR.createFromParcel(data);
136             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
137             Bundle state = data.readBundle();
138             List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
139             List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
140             boolean notResumed = data.readInt() != 0;
141             boolean isForward = data.readInt() != 0;
142             String profileName = data.readString();
143             ParcelFileDescriptor profileFd = data.readInt() != 0
144                     ? data.readFileDescriptor() : null;
145             boolean autoStopProfiler = data.readInt() != 0;
146             scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, state, ri, pi,
147                     notResumed, isForward, profileName, profileFd, autoStopProfiler);
148             return true;
149         }
150 
151         case SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION:
152         {
153             data.enforceInterface(IApplicationThread.descriptor);
154             IBinder b = data.readStrongBinder();
155             List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
156             List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
157             int configChanges = data.readInt();
158             boolean notResumed = data.readInt() != 0;
159             Configuration config = null;
160             if (data.readInt() != 0) {
161                 config = Configuration.CREATOR.createFromParcel(data);
162             }
163             scheduleRelaunchActivity(b, ri, pi, configChanges, notResumed, config);
164             return true;
165         }
166 
167         case SCHEDULE_NEW_INTENT_TRANSACTION:
168         {
169             data.enforceInterface(IApplicationThread.descriptor);
170             List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
171             IBinder b = data.readStrongBinder();
172             scheduleNewIntent(pi, b);
173             return true;
174         }
175 
176         case SCHEDULE_FINISH_ACTIVITY_TRANSACTION:
177         {
178             data.enforceInterface(IApplicationThread.descriptor);
179             IBinder b = data.readStrongBinder();
180             boolean finishing = data.readInt() != 0;
181             int configChanges = data.readInt();
182             scheduleDestroyActivity(b, finishing, configChanges);
183             return true;
184         }
185 
186         case SCHEDULE_RECEIVER_TRANSACTION:
187         {
188             data.enforceInterface(IApplicationThread.descriptor);
189             Intent intent = Intent.CREATOR.createFromParcel(data);
190             ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data);
191             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
192             int resultCode = data.readInt();
193             String resultData = data.readString();
194             Bundle resultExtras = data.readBundle();
195             boolean sync = data.readInt() != 0;
196             int sendingUser = data.readInt();
197             scheduleReceiver(intent, info, compatInfo, resultCode, resultData,
198                     resultExtras, sync, sendingUser);
199             return true;
200         }
201 
202         case SCHEDULE_CREATE_SERVICE_TRANSACTION: {
203             data.enforceInterface(IApplicationThread.descriptor);
204             IBinder token = data.readStrongBinder();
205             ServiceInfo info = ServiceInfo.CREATOR.createFromParcel(data);
206             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
207             scheduleCreateService(token, info, compatInfo);
208             return true;
209         }
210 
211         case SCHEDULE_BIND_SERVICE_TRANSACTION: {
212             data.enforceInterface(IApplicationThread.descriptor);
213             IBinder token = data.readStrongBinder();
214             Intent intent = Intent.CREATOR.createFromParcel(data);
215             boolean rebind = data.readInt() != 0;
216             scheduleBindService(token, intent, rebind);
217             return true;
218         }
219 
220         case SCHEDULE_UNBIND_SERVICE_TRANSACTION: {
221             data.enforceInterface(IApplicationThread.descriptor);
222             IBinder token = data.readStrongBinder();
223             Intent intent = Intent.CREATOR.createFromParcel(data);
224             scheduleUnbindService(token, intent);
225             return true;
226         }
227 
228         case SCHEDULE_SERVICE_ARGS_TRANSACTION:
229         {
230             data.enforceInterface(IApplicationThread.descriptor);
231             IBinder token = data.readStrongBinder();
232             boolean taskRemoved = data.readInt() != 0;
233             int startId = data.readInt();
234             int fl = data.readInt();
235             Intent args;
236             if (data.readInt() != 0) {
237                 args = Intent.CREATOR.createFromParcel(data);
238             } else {
239                 args = null;
240             }
241             scheduleServiceArgs(token, taskRemoved, startId, fl, args);
242             return true;
243         }
244 
245         case SCHEDULE_STOP_SERVICE_TRANSACTION:
246         {
247             data.enforceInterface(IApplicationThread.descriptor);
248             IBinder token = data.readStrongBinder();
249             scheduleStopService(token);
250             return true;
251         }
252 
253         case BIND_APPLICATION_TRANSACTION:
254         {
255             data.enforceInterface(IApplicationThread.descriptor);
256             String packageName = data.readString();
257             ApplicationInfo info =
258                 ApplicationInfo.CREATOR.createFromParcel(data);
259             List<ProviderInfo> providers =
260                 data.createTypedArrayList(ProviderInfo.CREATOR);
261             ComponentName testName = (data.readInt() != 0)
262                 ? new ComponentName(data) : null;
263             String profileName = data.readString();
264             ParcelFileDescriptor profileFd = data.readInt() != 0
265                     ? data.readFileDescriptor() : null;
266             boolean autoStopProfiler = data.readInt() != 0;
267             Bundle testArgs = data.readBundle();
268             IBinder binder = data.readStrongBinder();
269             IInstrumentationWatcher testWatcher = IInstrumentationWatcher.Stub.asInterface(binder);
270             int testMode = data.readInt();
271             boolean openGlTrace = data.readInt() != 0;
272             boolean restrictedBackupMode = (data.readInt() != 0);
273             boolean persistent = (data.readInt() != 0);
274             Configuration config = Configuration.CREATOR.createFromParcel(data);
275             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
276             HashMap<String, IBinder> services = data.readHashMap(null);
277             Bundle coreSettings = data.readBundle();
278             bindApplication(packageName, info,
279                             providers, testName, profileName, profileFd, autoStopProfiler,
280                             testArgs, testWatcher, testMode, openGlTrace, restrictedBackupMode,
281                             persistent, config, compatInfo, services, coreSettings);
282             return true;
283         }
284 
285         case SCHEDULE_EXIT_TRANSACTION:
286         {
287             data.enforceInterface(IApplicationThread.descriptor);
288             scheduleExit();
289             return true;
290         }
291 
292         case SCHEDULE_SUICIDE_TRANSACTION:
293         {
294             data.enforceInterface(IApplicationThread.descriptor);
295             scheduleSuicide();
296             return true;
297         }
298 
299         case REQUEST_THUMBNAIL_TRANSACTION:
300         {
301             data.enforceInterface(IApplicationThread.descriptor);
302             IBinder b = data.readStrongBinder();
303             requestThumbnail(b);
304             return true;
305         }
306 
307         case SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION:
308         {
309             data.enforceInterface(IApplicationThread.descriptor);
310             Configuration config = Configuration.CREATOR.createFromParcel(data);
311             scheduleConfigurationChanged(config);
312             return true;
313         }
314 
315         case UPDATE_TIME_ZONE_TRANSACTION: {
316             data.enforceInterface(IApplicationThread.descriptor);
317             updateTimeZone();
318             return true;
319         }
320 
321         case CLEAR_DNS_CACHE_TRANSACTION: {
322             data.enforceInterface(IApplicationThread.descriptor);
323             clearDnsCache();
324             return true;
325         }
326 
327         case SET_HTTP_PROXY_TRANSACTION: {
328             data.enforceInterface(IApplicationThread.descriptor);
329             final String proxy = data.readString();
330             final String port = data.readString();
331             final String exclList = data.readString();
332             setHttpProxy(proxy, port, exclList);
333             return true;
334         }
335 
336         case PROCESS_IN_BACKGROUND_TRANSACTION: {
337             data.enforceInterface(IApplicationThread.descriptor);
338             processInBackground();
339             return true;
340         }
341 
342         case DUMP_SERVICE_TRANSACTION: {
343             data.enforceInterface(IApplicationThread.descriptor);
344             ParcelFileDescriptor fd = data.readFileDescriptor();
345             final IBinder service = data.readStrongBinder();
346             final String[] args = data.readStringArray();
347             if (fd != null) {
348                 dumpService(fd.getFileDescriptor(), service, args);
349                 try {
350                     fd.close();
351                 } catch (IOException e) {
352                 }
353             }
354             return true;
355         }
356 
357         case DUMP_PROVIDER_TRANSACTION: {
358             data.enforceInterface(IApplicationThread.descriptor);
359             ParcelFileDescriptor fd = data.readFileDescriptor();
360             final IBinder service = data.readStrongBinder();
361             final String[] args = data.readStringArray();
362             if (fd != null) {
363                 dumpProvider(fd.getFileDescriptor(), service, args);
364                 try {
365                     fd.close();
366                 } catch (IOException e) {
367                 }
368             }
369             return true;
370         }
371 
372         case SCHEDULE_REGISTERED_RECEIVER_TRANSACTION: {
373             data.enforceInterface(IApplicationThread.descriptor);
374             IIntentReceiver receiver = IIntentReceiver.Stub.asInterface(
375                     data.readStrongBinder());
376             Intent intent = Intent.CREATOR.createFromParcel(data);
377             int resultCode = data.readInt();
378             String dataStr = data.readString();
379             Bundle extras = data.readBundle();
380             boolean ordered = data.readInt() != 0;
381             boolean sticky = data.readInt() != 0;
382             int sendingUser = data.readInt();
383             scheduleRegisteredReceiver(receiver, intent,
384                     resultCode, dataStr, extras, ordered, sticky, sendingUser);
385             return true;
386         }
387 
388         case SCHEDULE_LOW_MEMORY_TRANSACTION:
389         {
390             data.enforceInterface(IApplicationThread.descriptor);
391             scheduleLowMemory();
392             return true;
393         }
394 
395         case SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION:
396         {
397             data.enforceInterface(IApplicationThread.descriptor);
398             IBinder b = data.readStrongBinder();
399             scheduleActivityConfigurationChanged(b);
400             return true;
401         }
402 
403         case PROFILER_CONTROL_TRANSACTION:
404         {
405             data.enforceInterface(IApplicationThread.descriptor);
406             boolean start = data.readInt() != 0;
407             int profileType = data.readInt();
408             String path = data.readString();
409             ParcelFileDescriptor fd = data.readInt() != 0
410                     ? data.readFileDescriptor() : null;
411             profilerControl(start, path, fd, profileType);
412             return true;
413         }
414 
415         case SET_SCHEDULING_GROUP_TRANSACTION:
416         {
417             data.enforceInterface(IApplicationThread.descriptor);
418             int group = data.readInt();
419             setSchedulingGroup(group);
420             return true;
421         }
422 
423         case SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION:
424         {
425             data.enforceInterface(IApplicationThread.descriptor);
426             ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data);
427             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
428             int backupMode = data.readInt();
429             scheduleCreateBackupAgent(appInfo, compatInfo, backupMode);
430             return true;
431         }
432 
433         case SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION:
434         {
435             data.enforceInterface(IApplicationThread.descriptor);
436             ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data);
437             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
438             scheduleDestroyBackupAgent(appInfo, compatInfo);
439             return true;
440         }
441 
442         case GET_MEMORY_INFO_TRANSACTION:
443         {
444             data.enforceInterface(IApplicationThread.descriptor);
445             Debug.MemoryInfo mi = new Debug.MemoryInfo();
446             getMemoryInfo(mi);
447             reply.writeNoException();
448             mi.writeToParcel(reply, 0);
449             return true;
450         }
451 
452         case DISPATCH_PACKAGE_BROADCAST_TRANSACTION:
453         {
454             data.enforceInterface(IApplicationThread.descriptor);
455             int cmd = data.readInt();
456             String[] packages = data.readStringArray();
457             dispatchPackageBroadcast(cmd, packages);
458             return true;
459         }
460 
461         case SCHEDULE_CRASH_TRANSACTION:
462         {
463             data.enforceInterface(IApplicationThread.descriptor);
464             String msg = data.readString();
465             scheduleCrash(msg);
466             return true;
467         }
468 
469         case DUMP_HEAP_TRANSACTION:
470         {
471             data.enforceInterface(IApplicationThread.descriptor);
472             boolean managed = data.readInt() != 0;
473             String path = data.readString();
474             ParcelFileDescriptor fd = data.readInt() != 0
475                     ? data.readFileDescriptor() : null;
476             dumpHeap(managed, path, fd);
477             return true;
478         }
479 
480         case DUMP_ACTIVITY_TRANSACTION: {
481             data.enforceInterface(IApplicationThread.descriptor);
482             ParcelFileDescriptor fd = data.readFileDescriptor();
483             final IBinder activity = data.readStrongBinder();
484             final String prefix = data.readString();
485             final String[] args = data.readStringArray();
486             if (fd != null) {
487                 dumpActivity(fd.getFileDescriptor(), activity, prefix, args);
488                 try {
489                     fd.close();
490                 } catch (IOException e) {
491                 }
492             }
493             return true;
494         }
495 
496         case SET_CORE_SETTINGS_TRANSACTION: {
497             data.enforceInterface(IApplicationThread.descriptor);
498             Bundle settings = data.readBundle();
499             setCoreSettings(settings);
500             return true;
501         }
502 
503         case UPDATE_PACKAGE_COMPATIBILITY_INFO_TRANSACTION: {
504             data.enforceInterface(IApplicationThread.descriptor);
505             String pkg = data.readString();
506             CompatibilityInfo compat = CompatibilityInfo.CREATOR.createFromParcel(data);
507             updatePackageCompatibilityInfo(pkg, compat);
508             return true;
509         }
510 
511         case SCHEDULE_TRIM_MEMORY_TRANSACTION: {
512             data.enforceInterface(IApplicationThread.descriptor);
513             int level = data.readInt();
514             scheduleTrimMemory(level);
515             return true;
516         }
517 
518         case DUMP_MEM_INFO_TRANSACTION:
519         {
520             data.enforceInterface(IApplicationThread.descriptor);
521             ParcelFileDescriptor fd = data.readFileDescriptor();
522             boolean checkin = data.readInt() != 0;
523             boolean all = data.readInt() != 0;
524             String[] args = data.readStringArray();
525             Debug.MemoryInfo mi = null;
526             if (fd != null) {
527                 try {
528                     mi = dumpMemInfo(fd.getFileDescriptor(), checkin, all, args);
529                 } finally {
530                     try {
531                         fd.close();
532                     } catch (IOException e) {
533                         // swallowed, not propagated back to the caller
534                     }
535                 }
536             }
537             reply.writeNoException();
538             mi.writeToParcel(reply, 0);
539             return true;
540         }
541 
542         case DUMP_GFX_INFO_TRANSACTION:
543         {
544             data.enforceInterface(IApplicationThread.descriptor);
545             ParcelFileDescriptor fd = data.readFileDescriptor();
546             String[] args = data.readStringArray();
547             if (fd != null) {
548                 try {
549                     dumpGfxInfo(fd.getFileDescriptor(), args);
550                 } finally {
551                     try {
552                         fd.close();
553                     } catch (IOException e) {
554                         // swallowed, not propagated back to the caller
555                     }
556                 }
557             }
558             reply.writeNoException();
559             return true;
560         }
561 
562         case DUMP_DB_INFO_TRANSACTION:
563         {
564             data.enforceInterface(IApplicationThread.descriptor);
565             ParcelFileDescriptor fd = data.readFileDescriptor();
566             String[] args = data.readStringArray();
567             if (fd != null) {
568                 try {
569                     dumpDbInfo(fd.getFileDescriptor(), args);
570                 } finally {
571                     try {
572                         fd.close();
573                     } catch (IOException e) {
574                         // swallowed, not propagated back to the caller
575                     }
576                 }
577             }
578             reply.writeNoException();
579             return true;
580         }
581 
582         case UNSTABLE_PROVIDER_DIED_TRANSACTION:
583         {
584             data.enforceInterface(IApplicationThread.descriptor);
585             IBinder provider = data.readStrongBinder();
586             unstableProviderDied(provider);
587             reply.writeNoException();
588             return true;
589         }
590         }
591 
592         return super.onTransact(code, data, reply, flags);
593     }
594 
asBinder()595     public IBinder asBinder()
596     {
597         return this;
598     }
599 }
600 
601 class ApplicationThreadProxy implements IApplicationThread {
602     private final IBinder mRemote;
603 
ApplicationThreadProxy(IBinder remote)604     public ApplicationThreadProxy(IBinder remote) {
605         mRemote = remote;
606     }
607 
asBinder()608     public final IBinder asBinder() {
609         return mRemote;
610     }
611 
schedulePauseActivity(IBinder token, boolean finished, boolean userLeaving, int configChanges)612     public final void schedulePauseActivity(IBinder token, boolean finished,
613             boolean userLeaving, int configChanges) throws RemoteException {
614         Parcel data = Parcel.obtain();
615         data.writeInterfaceToken(IApplicationThread.descriptor);
616         data.writeStrongBinder(token);
617         data.writeInt(finished ? 1 : 0);
618         data.writeInt(userLeaving ? 1 :0);
619         data.writeInt(configChanges);
620         mRemote.transact(SCHEDULE_PAUSE_ACTIVITY_TRANSACTION, data, null,
621                 IBinder.FLAG_ONEWAY);
622         data.recycle();
623     }
624 
scheduleStopActivity(IBinder token, boolean showWindow, int configChanges)625     public final void scheduleStopActivity(IBinder token, boolean showWindow,
626             int configChanges) throws RemoteException {
627         Parcel data = Parcel.obtain();
628         data.writeInterfaceToken(IApplicationThread.descriptor);
629         data.writeStrongBinder(token);
630         data.writeInt(showWindow ? 1 : 0);
631         data.writeInt(configChanges);
632         mRemote.transact(SCHEDULE_STOP_ACTIVITY_TRANSACTION, data, null,
633                 IBinder.FLAG_ONEWAY);
634         data.recycle();
635     }
636 
scheduleWindowVisibility(IBinder token, boolean showWindow)637     public final void scheduleWindowVisibility(IBinder token,
638             boolean showWindow) throws RemoteException {
639         Parcel data = Parcel.obtain();
640         data.writeInterfaceToken(IApplicationThread.descriptor);
641         data.writeStrongBinder(token);
642         data.writeInt(showWindow ? 1 : 0);
643         mRemote.transact(SCHEDULE_WINDOW_VISIBILITY_TRANSACTION, data, null,
644                 IBinder.FLAG_ONEWAY);
645         data.recycle();
646     }
647 
scheduleSleeping(IBinder token, boolean sleeping)648     public final void scheduleSleeping(IBinder token,
649             boolean sleeping) throws RemoteException {
650         Parcel data = Parcel.obtain();
651         data.writeInterfaceToken(IApplicationThread.descriptor);
652         data.writeStrongBinder(token);
653         data.writeInt(sleeping ? 1 : 0);
654         mRemote.transact(SCHEDULE_SLEEPING_TRANSACTION, data, null,
655                 IBinder.FLAG_ONEWAY);
656         data.recycle();
657     }
658 
scheduleResumeActivity(IBinder token, boolean isForward)659     public final void scheduleResumeActivity(IBinder token, boolean isForward)
660             throws RemoteException {
661         Parcel data = Parcel.obtain();
662         data.writeInterfaceToken(IApplicationThread.descriptor);
663         data.writeStrongBinder(token);
664         data.writeInt(isForward ? 1 : 0);
665         mRemote.transact(SCHEDULE_RESUME_ACTIVITY_TRANSACTION, data, null,
666                 IBinder.FLAG_ONEWAY);
667         data.recycle();
668     }
669 
scheduleSendResult(IBinder token, List<ResultInfo> results)670     public final void scheduleSendResult(IBinder token, List<ResultInfo> results)
671     		throws RemoteException {
672         Parcel data = Parcel.obtain();
673         data.writeInterfaceToken(IApplicationThread.descriptor);
674         data.writeStrongBinder(token);
675         data.writeTypedList(results);
676         mRemote.transact(SCHEDULE_SEND_RESULT_TRANSACTION, data, null,
677                 IBinder.FLAG_ONEWAY);
678         data.recycle();
679     }
680 
scheduleLaunchActivity(Intent intent, IBinder token, int ident, ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo, Bundle state, List<ResultInfo> pendingResults, List<Intent> pendingNewIntents, boolean notResumed, boolean isForward, String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)681     public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
682             ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
683             Bundle state, List<ResultInfo> pendingResults,
684     		List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
685     		String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
686     		throws RemoteException {
687         Parcel data = Parcel.obtain();
688         data.writeInterfaceToken(IApplicationThread.descriptor);
689         intent.writeToParcel(data, 0);
690         data.writeStrongBinder(token);
691         data.writeInt(ident);
692         info.writeToParcel(data, 0);
693         curConfig.writeToParcel(data, 0);
694         compatInfo.writeToParcel(data, 0);
695         data.writeBundle(state);
696         data.writeTypedList(pendingResults);
697         data.writeTypedList(pendingNewIntents);
698         data.writeInt(notResumed ? 1 : 0);
699         data.writeInt(isForward ? 1 : 0);
700         data.writeString(profileName);
701         if (profileFd != null) {
702             data.writeInt(1);
703             profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
704         } else {
705             data.writeInt(0);
706         }
707         data.writeInt(autoStopProfiler ? 1 : 0);
708         mRemote.transact(SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION, data, null,
709                 IBinder.FLAG_ONEWAY);
710         data.recycle();
711     }
712 
scheduleRelaunchActivity(IBinder token, List<ResultInfo> pendingResults, List<Intent> pendingNewIntents, int configChanges, boolean notResumed, Configuration config)713     public final void scheduleRelaunchActivity(IBinder token,
714             List<ResultInfo> pendingResults, List<Intent> pendingNewIntents,
715             int configChanges, boolean notResumed, Configuration config)
716             throws RemoteException {
717         Parcel data = Parcel.obtain();
718         data.writeInterfaceToken(IApplicationThread.descriptor);
719         data.writeStrongBinder(token);
720         data.writeTypedList(pendingResults);
721         data.writeTypedList(pendingNewIntents);
722         data.writeInt(configChanges);
723         data.writeInt(notResumed ? 1 : 0);
724         if (config != null) {
725             data.writeInt(1);
726             config.writeToParcel(data, 0);
727         } else {
728             data.writeInt(0);
729         }
730         mRemote.transact(SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION, data, null,
731                 IBinder.FLAG_ONEWAY);
732         data.recycle();
733     }
734 
scheduleNewIntent(List<Intent> intents, IBinder token)735     public void scheduleNewIntent(List<Intent> intents, IBinder token)
736             throws RemoteException {
737         Parcel data = Parcel.obtain();
738         data.writeInterfaceToken(IApplicationThread.descriptor);
739         data.writeTypedList(intents);
740         data.writeStrongBinder(token);
741         mRemote.transact(SCHEDULE_NEW_INTENT_TRANSACTION, data, null,
742                 IBinder.FLAG_ONEWAY);
743         data.recycle();
744     }
745 
scheduleDestroyActivity(IBinder token, boolean finishing, int configChanges)746     public final void scheduleDestroyActivity(IBinder token, boolean finishing,
747             int configChanges) throws RemoteException {
748         Parcel data = Parcel.obtain();
749         data.writeInterfaceToken(IApplicationThread.descriptor);
750         data.writeStrongBinder(token);
751         data.writeInt(finishing ? 1 : 0);
752         data.writeInt(configChanges);
753         mRemote.transact(SCHEDULE_FINISH_ACTIVITY_TRANSACTION, data, null,
754                 IBinder.FLAG_ONEWAY);
755         data.recycle();
756     }
757 
scheduleReceiver(Intent intent, ActivityInfo info, CompatibilityInfo compatInfo, int resultCode, String resultData, Bundle map, boolean sync, int sendingUser)758     public final void scheduleReceiver(Intent intent, ActivityInfo info,
759             CompatibilityInfo compatInfo, int resultCode, String resultData,
760             Bundle map, boolean sync, int sendingUser) throws RemoteException {
761         Parcel data = Parcel.obtain();
762         data.writeInterfaceToken(IApplicationThread.descriptor);
763         intent.writeToParcel(data, 0);
764         info.writeToParcel(data, 0);
765         compatInfo.writeToParcel(data, 0);
766         data.writeInt(resultCode);
767         data.writeString(resultData);
768         data.writeBundle(map);
769         data.writeInt(sync ? 1 : 0);
770         data.writeInt(sendingUser);
771         mRemote.transact(SCHEDULE_RECEIVER_TRANSACTION, data, null,
772                 IBinder.FLAG_ONEWAY);
773         data.recycle();
774     }
775 
scheduleCreateBackupAgent(ApplicationInfo app, CompatibilityInfo compatInfo, int backupMode)776     public final void scheduleCreateBackupAgent(ApplicationInfo app,
777             CompatibilityInfo compatInfo, int backupMode) throws RemoteException {
778         Parcel data = Parcel.obtain();
779         data.writeInterfaceToken(IApplicationThread.descriptor);
780         app.writeToParcel(data, 0);
781         compatInfo.writeToParcel(data, 0);
782         data.writeInt(backupMode);
783         mRemote.transact(SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION, data, null,
784                 IBinder.FLAG_ONEWAY);
785         data.recycle();
786     }
787 
scheduleDestroyBackupAgent(ApplicationInfo app, CompatibilityInfo compatInfo)788     public final void scheduleDestroyBackupAgent(ApplicationInfo app,
789             CompatibilityInfo compatInfo) throws RemoteException {
790         Parcel data = Parcel.obtain();
791         data.writeInterfaceToken(IApplicationThread.descriptor);
792         app.writeToParcel(data, 0);
793         compatInfo.writeToParcel(data, 0);
794         mRemote.transact(SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION, data, null,
795                 IBinder.FLAG_ONEWAY);
796         data.recycle();
797     }
798 
scheduleCreateService(IBinder token, ServiceInfo info, CompatibilityInfo compatInfo)799     public final void scheduleCreateService(IBinder token, ServiceInfo info,
800             CompatibilityInfo compatInfo) throws RemoteException {
801         Parcel data = Parcel.obtain();
802         data.writeInterfaceToken(IApplicationThread.descriptor);
803         data.writeStrongBinder(token);
804         info.writeToParcel(data, 0);
805         compatInfo.writeToParcel(data, 0);
806         mRemote.transact(SCHEDULE_CREATE_SERVICE_TRANSACTION, data, null,
807                 IBinder.FLAG_ONEWAY);
808         data.recycle();
809     }
810 
scheduleBindService(IBinder token, Intent intent, boolean rebind)811     public final void scheduleBindService(IBinder token, Intent intent, boolean rebind)
812             throws RemoteException {
813         Parcel data = Parcel.obtain();
814         data.writeInterfaceToken(IApplicationThread.descriptor);
815         data.writeStrongBinder(token);
816         intent.writeToParcel(data, 0);
817         data.writeInt(rebind ? 1 : 0);
818         mRemote.transact(SCHEDULE_BIND_SERVICE_TRANSACTION, data, null,
819                 IBinder.FLAG_ONEWAY);
820         data.recycle();
821     }
822 
scheduleUnbindService(IBinder token, Intent intent)823     public final void scheduleUnbindService(IBinder token, Intent intent)
824             throws RemoteException {
825         Parcel data = Parcel.obtain();
826         data.writeInterfaceToken(IApplicationThread.descriptor);
827         data.writeStrongBinder(token);
828         intent.writeToParcel(data, 0);
829         mRemote.transact(SCHEDULE_UNBIND_SERVICE_TRANSACTION, data, null,
830                 IBinder.FLAG_ONEWAY);
831         data.recycle();
832     }
833 
scheduleServiceArgs(IBinder token, boolean taskRemoved, int startId, int flags, Intent args)834     public final void scheduleServiceArgs(IBinder token, boolean taskRemoved, int startId,
835 	    int flags, Intent args) throws RemoteException {
836         Parcel data = Parcel.obtain();
837         data.writeInterfaceToken(IApplicationThread.descriptor);
838         data.writeStrongBinder(token);
839         data.writeInt(taskRemoved ? 1 : 0);
840         data.writeInt(startId);
841         data.writeInt(flags);
842         if (args != null) {
843             data.writeInt(1);
844             args.writeToParcel(data, 0);
845         } else {
846             data.writeInt(0);
847         }
848         mRemote.transact(SCHEDULE_SERVICE_ARGS_TRANSACTION, data, null,
849                 IBinder.FLAG_ONEWAY);
850         data.recycle();
851     }
852 
scheduleStopService(IBinder token)853     public final void scheduleStopService(IBinder token)
854             throws RemoteException {
855         Parcel data = Parcel.obtain();
856         data.writeInterfaceToken(IApplicationThread.descriptor);
857         data.writeStrongBinder(token);
858         mRemote.transact(SCHEDULE_STOP_SERVICE_TRANSACTION, data, null,
859                 IBinder.FLAG_ONEWAY);
860         data.recycle();
861     }
862 
bindApplication(String packageName, ApplicationInfo info, List<ProviderInfo> providers, ComponentName testName, String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler, Bundle testArgs, IInstrumentationWatcher testWatcher, int debugMode, boolean openGlTrace, boolean restrictedBackupMode, boolean persistent, Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services, Bundle coreSettings)863     public final void bindApplication(String packageName, ApplicationInfo info,
864             List<ProviderInfo> providers, ComponentName testName, String profileName,
865             ParcelFileDescriptor profileFd, boolean autoStopProfiler, Bundle testArgs,
866             IInstrumentationWatcher testWatcher, int debugMode, boolean openGlTrace,
867             boolean restrictedBackupMode, boolean persistent,
868             Configuration config, CompatibilityInfo compatInfo,
869             Map<String, IBinder> services, Bundle coreSettings) throws RemoteException {
870         Parcel data = Parcel.obtain();
871         data.writeInterfaceToken(IApplicationThread.descriptor);
872         data.writeString(packageName);
873         info.writeToParcel(data, 0);
874         data.writeTypedList(providers);
875         if (testName == null) {
876             data.writeInt(0);
877         } else {
878             data.writeInt(1);
879             testName.writeToParcel(data, 0);
880         }
881         data.writeString(profileName);
882         if (profileFd != null) {
883             data.writeInt(1);
884             profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
885         } else {
886             data.writeInt(0);
887         }
888         data.writeInt(autoStopProfiler ? 1 : 0);
889         data.writeBundle(testArgs);
890         data.writeStrongInterface(testWatcher);
891         data.writeInt(debugMode);
892         data.writeInt(openGlTrace ? 1 : 0);
893         data.writeInt(restrictedBackupMode ? 1 : 0);
894         data.writeInt(persistent ? 1 : 0);
895         config.writeToParcel(data, 0);
896         compatInfo.writeToParcel(data, 0);
897         data.writeMap(services);
898         data.writeBundle(coreSettings);
899         mRemote.transact(BIND_APPLICATION_TRANSACTION, data, null,
900                 IBinder.FLAG_ONEWAY);
901         data.recycle();
902     }
903 
scheduleExit()904     public final void scheduleExit() throws RemoteException {
905         Parcel data = Parcel.obtain();
906         data.writeInterfaceToken(IApplicationThread.descriptor);
907         mRemote.transact(SCHEDULE_EXIT_TRANSACTION, data, null,
908                 IBinder.FLAG_ONEWAY);
909         data.recycle();
910     }
911 
scheduleSuicide()912     public final void scheduleSuicide() throws RemoteException {
913         Parcel data = Parcel.obtain();
914         data.writeInterfaceToken(IApplicationThread.descriptor);
915         mRemote.transact(SCHEDULE_SUICIDE_TRANSACTION, data, null,
916                 IBinder.FLAG_ONEWAY);
917         data.recycle();
918     }
919 
requestThumbnail(IBinder token)920     public final void requestThumbnail(IBinder token)
921             throws RemoteException {
922         Parcel data = Parcel.obtain();
923         data.writeInterfaceToken(IApplicationThread.descriptor);
924         data.writeStrongBinder(token);
925         mRemote.transact(REQUEST_THUMBNAIL_TRANSACTION, data, null,
926                 IBinder.FLAG_ONEWAY);
927         data.recycle();
928     }
929 
scheduleConfigurationChanged(Configuration config)930     public final void scheduleConfigurationChanged(Configuration config)
931             throws RemoteException {
932         Parcel data = Parcel.obtain();
933         data.writeInterfaceToken(IApplicationThread.descriptor);
934         config.writeToParcel(data, 0);
935         mRemote.transact(SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION, data, null,
936                 IBinder.FLAG_ONEWAY);
937         data.recycle();
938     }
939 
updateTimeZone()940     public void updateTimeZone() throws RemoteException {
941         Parcel data = Parcel.obtain();
942         data.writeInterfaceToken(IApplicationThread.descriptor);
943         mRemote.transact(UPDATE_TIME_ZONE_TRANSACTION, data, null,
944                 IBinder.FLAG_ONEWAY);
945         data.recycle();
946     }
947 
clearDnsCache()948     public void clearDnsCache() throws RemoteException {
949         Parcel data = Parcel.obtain();
950         data.writeInterfaceToken(IApplicationThread.descriptor);
951         mRemote.transact(CLEAR_DNS_CACHE_TRANSACTION, data, null,
952                 IBinder.FLAG_ONEWAY);
953         data.recycle();
954     }
955 
setHttpProxy(String proxy, String port, String exclList)956     public void setHttpProxy(String proxy, String port, String exclList) throws RemoteException {
957         Parcel data = Parcel.obtain();
958         data.writeInterfaceToken(IApplicationThread.descriptor);
959         data.writeString(proxy);
960         data.writeString(port);
961         data.writeString(exclList);
962         mRemote.transact(SET_HTTP_PROXY_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
963         data.recycle();
964     }
965 
processInBackground()966     public void processInBackground() throws RemoteException {
967         Parcel data = Parcel.obtain();
968         data.writeInterfaceToken(IApplicationThread.descriptor);
969         mRemote.transact(PROCESS_IN_BACKGROUND_TRANSACTION, data, null,
970                 IBinder.FLAG_ONEWAY);
971         data.recycle();
972     }
973 
dumpService(FileDescriptor fd, IBinder token, String[] args)974     public void dumpService(FileDescriptor fd, IBinder token, String[] args)
975             throws RemoteException {
976         Parcel data = Parcel.obtain();
977         data.writeInterfaceToken(IApplicationThread.descriptor);
978         data.writeFileDescriptor(fd);
979         data.writeStrongBinder(token);
980         data.writeStringArray(args);
981         mRemote.transact(DUMP_SERVICE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
982         data.recycle();
983     }
984 
dumpProvider(FileDescriptor fd, IBinder token, String[] args)985     public void dumpProvider(FileDescriptor fd, IBinder token, String[] args)
986             throws RemoteException {
987         Parcel data = Parcel.obtain();
988         data.writeInterfaceToken(IApplicationThread.descriptor);
989         data.writeFileDescriptor(fd);
990         data.writeStrongBinder(token);
991         data.writeStringArray(args);
992         mRemote.transact(DUMP_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
993         data.recycle();
994     }
995 
scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent, int resultCode, String dataStr, Bundle extras, boolean ordered, boolean sticky, int sendingUser)996     public void scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent,
997             int resultCode, String dataStr, Bundle extras, boolean ordered,
998             boolean sticky, int sendingUser) throws RemoteException {
999         Parcel data = Parcel.obtain();
1000         data.writeInterfaceToken(IApplicationThread.descriptor);
1001         data.writeStrongBinder(receiver.asBinder());
1002         intent.writeToParcel(data, 0);
1003         data.writeInt(resultCode);
1004         data.writeString(dataStr);
1005         data.writeBundle(extras);
1006         data.writeInt(ordered ? 1 : 0);
1007         data.writeInt(sticky ? 1 : 0);
1008         data.writeInt(sendingUser);
1009         mRemote.transact(SCHEDULE_REGISTERED_RECEIVER_TRANSACTION, data, null,
1010                 IBinder.FLAG_ONEWAY);
1011         data.recycle();
1012     }
1013 
scheduleLowMemory()1014     public final void scheduleLowMemory() throws RemoteException {
1015         Parcel data = Parcel.obtain();
1016         data.writeInterfaceToken(IApplicationThread.descriptor);
1017         mRemote.transact(SCHEDULE_LOW_MEMORY_TRANSACTION, data, null,
1018                 IBinder.FLAG_ONEWAY);
1019         data.recycle();
1020     }
1021 
scheduleActivityConfigurationChanged( IBinder token)1022     public final void scheduleActivityConfigurationChanged(
1023             IBinder token) throws RemoteException {
1024         Parcel data = Parcel.obtain();
1025         data.writeInterfaceToken(IApplicationThread.descriptor);
1026         data.writeStrongBinder(token);
1027         mRemote.transact(SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION, data, null,
1028                 IBinder.FLAG_ONEWAY);
1029         data.recycle();
1030     }
1031 
profilerControl(boolean start, String path, ParcelFileDescriptor fd, int profileType)1032     public void profilerControl(boolean start, String path,
1033             ParcelFileDescriptor fd, int profileType) throws RemoteException {
1034         Parcel data = Parcel.obtain();
1035         data.writeInterfaceToken(IApplicationThread.descriptor);
1036         data.writeInt(start ? 1 : 0);
1037         data.writeInt(profileType);
1038         data.writeString(path);
1039         if (fd != null) {
1040             data.writeInt(1);
1041             fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1042         } else {
1043             data.writeInt(0);
1044         }
1045         mRemote.transact(PROFILER_CONTROL_TRANSACTION, data, null,
1046                 IBinder.FLAG_ONEWAY);
1047         data.recycle();
1048     }
1049 
setSchedulingGroup(int group)1050     public void setSchedulingGroup(int group) throws RemoteException {
1051         Parcel data = Parcel.obtain();
1052         data.writeInterfaceToken(IApplicationThread.descriptor);
1053         data.writeInt(group);
1054         mRemote.transact(SET_SCHEDULING_GROUP_TRANSACTION, data, null,
1055                 IBinder.FLAG_ONEWAY);
1056         data.recycle();
1057     }
1058 
getMemoryInfo(Debug.MemoryInfo outInfo)1059     public void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException {
1060         Parcel data = Parcel.obtain();
1061         Parcel reply = Parcel.obtain();
1062         data.writeInterfaceToken(IApplicationThread.descriptor);
1063         mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
1064         reply.readException();
1065         outInfo.readFromParcel(reply);
1066         data.recycle();
1067         reply.recycle();
1068     }
1069 
dispatchPackageBroadcast(int cmd, String[] packages)1070     public void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException {
1071         Parcel data = Parcel.obtain();
1072         data.writeInterfaceToken(IApplicationThread.descriptor);
1073         data.writeInt(cmd);
1074         data.writeStringArray(packages);
1075         mRemote.transact(DISPATCH_PACKAGE_BROADCAST_TRANSACTION, data, null,
1076                 IBinder.FLAG_ONEWAY);
1077         data.recycle();
1078 
1079     }
1080 
scheduleCrash(String msg)1081     public void scheduleCrash(String msg) throws RemoteException {
1082         Parcel data = Parcel.obtain();
1083         data.writeInterfaceToken(IApplicationThread.descriptor);
1084         data.writeString(msg);
1085         mRemote.transact(SCHEDULE_CRASH_TRANSACTION, data, null,
1086                 IBinder.FLAG_ONEWAY);
1087         data.recycle();
1088 
1089     }
1090 
dumpHeap(boolean managed, String path, ParcelFileDescriptor fd)1091     public void dumpHeap(boolean managed, String path,
1092             ParcelFileDescriptor fd) throws RemoteException {
1093         Parcel data = Parcel.obtain();
1094         data.writeInterfaceToken(IApplicationThread.descriptor);
1095         data.writeInt(managed ? 1 : 0);
1096         data.writeString(path);
1097         if (fd != null) {
1098             data.writeInt(1);
1099             fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1100         } else {
1101             data.writeInt(0);
1102         }
1103         mRemote.transact(DUMP_HEAP_TRANSACTION, data, null,
1104                 IBinder.FLAG_ONEWAY);
1105         data.recycle();
1106     }
1107 
dumpActivity(FileDescriptor fd, IBinder token, String prefix, String[] args)1108     public void dumpActivity(FileDescriptor fd, IBinder token, String prefix, String[] args)
1109             throws RemoteException {
1110         Parcel data = Parcel.obtain();
1111         data.writeInterfaceToken(IApplicationThread.descriptor);
1112         data.writeFileDescriptor(fd);
1113         data.writeStrongBinder(token);
1114         data.writeString(prefix);
1115         data.writeStringArray(args);
1116         mRemote.transact(DUMP_ACTIVITY_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1117         data.recycle();
1118     }
1119 
setCoreSettings(Bundle coreSettings)1120     public void setCoreSettings(Bundle coreSettings) throws RemoteException {
1121         Parcel data = Parcel.obtain();
1122         data.writeInterfaceToken(IApplicationThread.descriptor);
1123         data.writeBundle(coreSettings);
1124         mRemote.transact(SET_CORE_SETTINGS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1125     }
1126 
updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info)1127     public void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info)
1128             throws RemoteException {
1129         Parcel data = Parcel.obtain();
1130         data.writeInterfaceToken(IApplicationThread.descriptor);
1131         data.writeString(pkg);
1132         info.writeToParcel(data, 0);
1133         mRemote.transact(UPDATE_PACKAGE_COMPATIBILITY_INFO_TRANSACTION, data, null,
1134                 IBinder.FLAG_ONEWAY);
1135     }
1136 
scheduleTrimMemory(int level)1137     public void scheduleTrimMemory(int level) throws RemoteException {
1138         Parcel data = Parcel.obtain();
1139         data.writeInterfaceToken(IApplicationThread.descriptor);
1140         data.writeInt(level);
1141         mRemote.transact(SCHEDULE_TRIM_MEMORY_TRANSACTION, data, null,
1142                 IBinder.FLAG_ONEWAY);
1143     }
1144 
dumpMemInfo(FileDescriptor fd, boolean checkin, boolean all, String[] args)1145     public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean all,
1146             String[] args) throws RemoteException {
1147         Parcel data = Parcel.obtain();
1148         Parcel reply = Parcel.obtain();
1149         data.writeInterfaceToken(IApplicationThread.descriptor);
1150         data.writeFileDescriptor(fd);
1151         data.writeInt(checkin ? 1 : 0);
1152         data.writeInt(all ? 1 : 0);
1153         data.writeStringArray(args);
1154         mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0);
1155         reply.readException();
1156         Debug.MemoryInfo info = new Debug.MemoryInfo();
1157         info.readFromParcel(reply);
1158         data.recycle();
1159         reply.recycle();
1160         return info;
1161     }
1162 
dumpGfxInfo(FileDescriptor fd, String[] args)1163     public void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException {
1164         Parcel data = Parcel.obtain();
1165         data.writeInterfaceToken(IApplicationThread.descriptor);
1166         data.writeFileDescriptor(fd);
1167         data.writeStringArray(args);
1168         mRemote.transact(DUMP_GFX_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1169         data.recycle();
1170     }
1171 
dumpDbInfo(FileDescriptor fd, String[] args)1172     public void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException {
1173         Parcel data = Parcel.obtain();
1174         data.writeInterfaceToken(IApplicationThread.descriptor);
1175         data.writeFileDescriptor(fd);
1176         data.writeStringArray(args);
1177         mRemote.transact(DUMP_DB_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1178         data.recycle();
1179     }
1180 
unstableProviderDied(IBinder provider)1181     public void unstableProviderDied(IBinder provider) throws RemoteException {
1182         Parcel data = Parcel.obtain();
1183         data.writeInterfaceToken(IApplicationThread.descriptor);
1184         data.writeStrongBinder(provider);
1185         mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1186         data.recycle();
1187     }
1188 }
1189