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