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