java– 为什么我的意图没有正确传递?

java– 为什么我的意图没有正确传递?,第1张

概述我在Android应用程序中启动服务时遇到问题.以下代码应该可以正常工作.但通常并非总是如此,startService命令的Intent未正确传递给onStartCommand方法.这意味着服务类接收了intent,但是额外的内容丢失了:D/TestService:onStartCommand()calledwith:intent=[Intent{cmp=***/

我在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 – 为什么我的意图没有正确传递?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1117386.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存