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