diff options
| author | 2024-01-30 22:44:52 +0000 | |
|---|---|---|
| committer | 2024-01-30 22:44:52 +0000 | |
| commit | b5d245390fc6aa4119e7ce3a2f398254369838e6 (patch) | |
| tree | c1b5916d12ac356ec1732e50293b335475ea83d0 /libs/binder/ActivityManager.cpp | |
| parent | c271c0e736bc9eaf39e149ac98a2a16ba96fba93 (diff) | |
| parent | 2d701e14093b2e699d7dca00db3d7d66d0c96e29 (diff) | |
Merge "Merge Android 24Q1 Release (ab/11220357)" into aosp-main-future
Diffstat (limited to 'libs/binder/ActivityManager.cpp')
| -rw-r--r-- | libs/binder/ActivityManager.cpp | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/libs/binder/ActivityManager.cpp b/libs/binder/ActivityManager.cpp index aca5009148..526427663b 100644 --- a/libs/binder/ActivityManager.cpp +++ b/libs/binder/ActivityManager.cpp @@ -21,6 +21,7 @@ #include <binder/ActivityManager.h> #include <binder/Binder.h> #include <binder/IServiceManager.h> +#include <binder/ProcessState.h> #include <utils/SystemClock.h> @@ -33,27 +34,36 @@ ActivityManager::ActivityManager() sp<IActivityManager> ActivityManager::getService() { std::lock_guard<Mutex> scoped_lock(mLock); - int64_t startTime = 0; sp<IActivityManager> service = mService; - while (service == nullptr || !IInterface::asBinder(service)->isBinderAlive()) { - sp<IBinder> binder = defaultServiceManager()->checkService(String16("activity")); - if (binder == nullptr) { - // Wait for the activity service to come back... - if (startTime == 0) { - startTime = uptimeMillis(); - ALOGI("Waiting for activity service"); - } else if ((uptimeMillis() - startTime) > 1000000) { - ALOGW("Waiting too long for activity service, giving up"); - service = nullptr; - break; - } - usleep(25000); - } else { + if (ProcessState::self()->isThreadPoolStarted()) { + if (service == nullptr || !IInterface::asBinder(service)->isBinderAlive()) { + sp<IBinder> binder = defaultServiceManager()->waitForService(String16("activity")); service = interface_cast<IActivityManager>(binder); mService = service; } + } else { + ALOGI("Thread pool not started. Polling for activity service."); + int64_t startTime = 0; + while (service == nullptr || !IInterface::asBinder(service)->isBinderAlive()) { + sp<IBinder> binder = defaultServiceManager()->checkService(String16("activity")); + if (binder == nullptr) { + // Wait for the activity service to come back... + if (startTime == 0) { + startTime = uptimeMillis(); + ALOGI("Waiting for activity service"); + } else if ((uptimeMillis() - startTime) > 1000000) { + ALOGW("Waiting too long for activity service, giving up"); + service = nullptr; + break; + } + usleep(25000); + } else { + service = interface_cast<IActivityManager>(binder); + mService = service; + } + } } - return service; + return mService; } int ActivityManager::openContentUri(const String16& stringUri) |