美文网首页
使用IntentService时候遇到的问题

使用IntentService时候遇到的问题

作者: 牧区叔叔 | 来源:发表于2020-12-09 10:00 被阅读0次

原先我是利用startservice启动一个服务(继承自service)时出现了个错误,报错信息为在点击事件中耗时5秒以上。所以改用intent service试试

继承intent service,系统会给我们实现两个方法

public class BLEService2 extends IntentService {
    private String TAG = "BLEService2";
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public BLEService2(String name) {
        super(name);
    }


    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.i(TAG, "onHandleIntent: ");
    }
}

直接启动的话会报以下错误!


image.png

大概意思就是

can't instantiate class com.example //无法实例化
Unable to instantiate service //无法实例化service
no empty constructor // 没有空构造函数

报错信息推断出IntentService需要一个无参的构造方法来,来进行初始化。所以出现java.lang.RuntimeException: Unable to instantiate service

以上系统提供的构造name属性 解释为
Used to name the worker thread, important only for debugging
翻译:用于命名工作线程,仅对调试很重要
所以在这里我们写一个构造,按要求写一个试试,修改如下

public class BLEService2 extends IntentService {
    private String TAG = "BLEService2";
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */
    public BLEService2() {
        super("testService");
    }


    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.i(TAG, "onHandleIntent: ");
    }
}
image.png

修改完之后生命周期可以正常运行了~,接下来继续踩坑...

本文到此结束

不要忘记在清单文件中注册服务

 <application
        android:name=".application.MainApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".activity.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".receiver.BLEReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <service
            android:name=".service.BLEService" />
<!--        name:service路径
            enabled:表示系统是否能够实例化该组件
            exported:表示该服务是否能够被其他应用程序组件所调用或者交互
-->
        <service android:name=".service.BLEService2"
            tools:ignore="Instantiatable" />
    </application>

相关文章

网友评论

      本文标题:使用IntentService时候遇到的问题

      本文链接:https://www.haomeiwen.com/subject/zxncgktx.html