
我在Android应用程序中启动服务时遇到问题.以下代码应该可以正常工作.但通常并非总是如此,startService命令的Intent未正确传递给onStartCommand方法.这意味着服务类接收了intent,但是额外的内容丢失了:
D/TestService: onStartCommand() called with: intent = [Intent { cmp=***/.services.hostConnection.TestService launchParam=MultiScreenLaunchParams { mdisplayID=0 mFlags=0 } (has extras) }], flags = [0], startID = [6]D/TestService: onStartCommand: Bundle[mParcelledData.dataSize=0]另外我有时会遇到RuntimeException:无法创建服务***.services.hostConnection.TestService(下面的完整堆栈跟踪)
我现在已经连续几天了,但找不到这个BUG …
一个极简主义的服务类,它可以重现这个问题:
public class TestService extends Service { private static final String TAG = "TestService"; @Nullable @OverrIDe public IBinder onBind(Intent intent) { return null; } @OverrIDe public int onStartCommand(Intent intent, int flags, int startID) { Log.d(TAG, "onStartCommand() called with: intent = [" + intent + "], flags = [" + flags + "], startID = [" + startID + "]"); if(intent != null && intent.getExtras() != null) Log.d(TAG, "onStartCommand: " + intent.getExtras().toString()); return START_NOT_STICKY; }}启动服务的方法:
public voID startLongUpdates(long hostID){ Log.d(TAG, "startLongUpdates() called"); Intent intent = new Intent(Application.getInstance(), TestService.class).putExtra(Constants.SERVICE_ACTION_INTENT_EXTRA, HostConnectionService.LONG_UPDATE).putExtra(Constants.CONNECTED_HOST_ID_INTENT_EXTRA, hostID); Log.d(TAG, "startLongUpdates: " + intent.getExtras().toString()); Application.getInstance().startService(intent);}堆栈跟踪:
E/AndroIDRuntime: FATAL EXCEPTION: main Process: ***, PID: 24974 java.lang.RuntimeException: Unable to create service ***.services.hostConnection.TestService: java.lang.SecurityException: Binder invocation to an incorrect interface at androID.app.ActivityThread.handleCreateService(ActivityThread.java:3532) at androID.app.ActivityThread.-wrap6(ActivityThread.java) at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1740) at androID.os.Handler.dispatchMessage(Handler.java:102) at androID.os.Looper.loop(Looper.java:154) at androID.app.ActivityThread.main(ActivityThread.java:6688) at java.lang.reflect.Method.invoke(Native Method) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1358) Caused by: java.lang.SecurityException: Binder invocation to an incorrect interface at androID.os.Parcel.readException(Parcel.java:1693) at androID.os.Parcel.readException(Parcel.java:1646) at androID.harDWare.display.IdisplayManager$Stub$Proxy.getdisplayInfo(IdisplayManager.java:718) at androID.harDWare.display.displayManagerGlobal.getdisplayInfo(displayManagerGlobal.java:143) at androID.harDWare.display.displayManagerGlobal.getCompatibledisplay(displayManagerGlobal.java:200) at androID.harDWare.display.displayManagerGlobal.getRealdisplay(displayManagerGlobal.java:214) at androID.app.ContextImpl.createAppContext(ContextImpl.java:2183) at androID.app.ActivityThread.handleCreateService(ActivityThread.java:3499) at androID.app.ActivityThread.-wrap6(ActivityThread.java) at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1740) at androID.os.Handler.dispatchMessage(Handler.java:102) at androID.os.Looper.loop(Looper.java:154) at androID.app.ActivityThread.main(ActivityThread.java:6688) at java.lang.reflect.Method.invoke(Native Method) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1358) 有时也会出现此异常:
E/AndroIDRuntime: FATAL EXCEPTION: main Process: ***, PID: 5355 java.lang.RuntimeException: Unable to start service ***.services.hostConnection.TestService@9386a65 with Intent { cmp=***/.services.hostConnection.TestService (has extras) }: java.lang.RuntimeException: UnkNown exception code: 2 msg ServiceActionIntentExtra at androID.app.ActivityThread.handleServiceArgs(ActivityThread.java:3027) at androID.app.ActivityThread.-wrap17(ActivityThread.java) at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1442) at androID.os.Handler.dispatchMessage(Handler.java:102) at androID.os.Looper.loop(Looper.java:148) at androID.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.RuntimeException: UnkNown exception code: 2 msg ServiceActionIntentExtra at androID.os.Parcel.readException(Parcel.java:1634) at androID.os.Parcel.readException(Parcel.java:1573) at androID.app.ActivityManagerProxy.serviceDoneExecuting(ActivityManagerNative.java:3814) at androID.app.ActivityThread.handleServiceArgs(ActivityThread.java:3019) at androID.app.ActivityThread.-wrap17(ActivityThread.java) at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1442) at androID.os.Handler.dispatchMessage(Handler.java:102) at androID.os.Looper.loop(Looper.java:148) at androID.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:616) 表现:
<manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"package="***"><uses-permission androID:name="androID.permission.ACCESS_WIFI_STATE" /><uses-permission androID:name="androID.permission.CHANGE_WIFI_STATE" /><uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" /><uses-permission androID:name="androID.permission.INTERNET" /><application androID:name="***.Application" androID:allowBackup="false" androID:icon="@mipmap/ic_launcher" androID:label="@string/app_name" androID:supportsRtl="true" androID:theme="@style/Apptheme"> <activity androID:launchMode="singletop" androID:name="***.gui.menu.MainActivity" androID:label="@string/app_name" androID:theme="@style/Apptheme.NoActionbar"> </activity> <activity androID:name=".gui.SplashActivity" androID:theme="@style/Splashtheme"> <intent-filter> <action androID:name="androID.intent.action.MAIN" /> <category androID:name="androID.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity androID:name="***.gui.menu.KNownHostInfoActivity" androID:theme="@style/Apptheme.NoActionbar" /> <service androID:name="***.services.hostConnection.TestService" /></application>Application.java:
public class Application extends androID.app.Application{ private static final String TAG = "Application"; private static Application application; public static Application getInstance(){ return application; } public voID onCreate() { super.onCreate(); application = this; }}解决方法:
我解决了这个问题!它与应用程序另一端使用的包裹有关…实际上,循环中使用的包裹被提前回收并由应用程序的其他部分重用.因此,这导致应用程序的许多部分出现各种问题.
还是要谢谢你的帮助!
总结以上是内存溢出为你收集整理的java – 为什么我的意图没有正确传递?全部内容,希望文章能够帮你解决java – 为什么我的意图没有正确传递?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)