You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android后台启动PayPalService触发IllegalStateException问题求助

问题描述

错误日志

Process: com.firstmile.taxicabondemandtaxi, PID: 9900
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.firstmile.taxicabondemandtaxi/com.firstmile.taxicabondemandtaxi.activity.MainActivity}: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.firstmile.taxicabondemandtaxi/com.paypal.android.sdk.payments.PayPalService (has extras) }: app is in background uid UidRecord{5e38638 u0a301 TPSL idle procs:1 seq(0,0,0)}
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3307)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:221)
    at android.app.ActivityThread.main(ActivityThread.java:7542)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
 Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.firstmile.taxicabondemandtaxi/com.paypal.android.sdk.payments.PayPalService (has extras) }: app is in background uid UidRecord{5e38638 u0a301 TPSL idle procs:1 seq(0,0,0)}
    at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1626)
    at android.app.ContextImpl.startService(ContextImpl.java:1581)
    at android.content.ContextWrapper.startService(ContextWrapper.java:679)
    at com.firstmile.taxicabondemandtaxi.activity.MainActivity.onCreate(MainActivity.java:380)
    at android.app.Activity.performCreate(Activity.java:7893)
    at android.app.Activity.performCreate(Activity.java:7880)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3282)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3446) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2043) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:221) 
    at android.app.ActivityThread.main(ActivityThread.java:7542) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
2022-11-30 10:06:23.297 9900-9979/com.firstmile.taxicabondemandtaxi D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2022-11-30 10:06:23.350 9900-9900/com.firstmile.taxicabondemandtaxi I/Process: Sending signal. PID: 9900 SIG: 9

当前启动服务代码

Intent intent = new Intent(context, PayPalService.class);
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
getApplication().startService(intent);

public static final String EXTRA_PAYPAL_CONFIGURATION = "com.paypal.android.sdk.paypalConfiguration";
解决方案

1. 适配Android后台服务限制(API 26+)

Android 8.0(API 26)及以上系统禁止APP在后台启动普通服务,需改用startForegroundService替代startService,同时要确保服务启动后5秒内调用startForeground显示前台通知:

修改启动代码:

Intent intent = new Intent(context, PayPalService.class);
intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config);
// 根据系统版本选择启动方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    getApplication().startForegroundService(intent);
} else {
    getApplication().startService(intent);
}

同时在AndroidManifest.xml中添加前台服务权限及配置:

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Android 12+ 需指定服务类型,根据PayPal服务用途选择,例如数据同步 -->
<service
    android:name="com.paypal.android.sdk.payments.PayPalService"
    android:foregroundServiceType="dataSync" />

2. 调整服务启动时机

避免在APP后台状态下启动服务,比如将PayPalService的启动时机从MainActivity.onCreate()移到用户触发的交互事件中(如点击支付按钮),此时APP处于前台,不会触发后台启动限制。

3. 升级PayPal SDK版本

检查当前使用的PayPal Android SDK版本,升级到官方最新版本,新版本通常已适配Android系统的后台服务限制,无需额外修改代码即可解决问题。

内容的提问来源于stack exchange,提问作者Swaraj Darne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:00:55