android 服务

今天自学到了一个android运用中的服务概念:

服务,泛指在后台执行的耗时操作。

它的生命周期是:onCreate onStartCommand onDestroy onBind

它的类型在官方上是:启动、绑定;我们通常称为本地服务以及远程服务。
本地服务:onStartCommand获得返回值,远程服务:onBind

服务的停止有两种方式:stopSelf、stopService。前者是在线程中执行停止服务,后者在activity就可以执行。而stopSelf又有两种形式,一种带参,一种不带参。

继承服务类有两种:Service、IntentService。后者有一个类似于onStartCommand作用的方法:onHandleIntent。不过,在继承了intentService的类中需要进行耗时操作不需要写子线程,可直接进行耗时操作

@Override
    protected void onHandleIntent(Intent intent) {
        for (int i = 0; i <10 ; i++) {
            Log.i("test","i="+i);
            SystemClock.sleep(200);
        }
    }
不过,在执行的时候需要在AndroidManifest.xml中配置
<service
            android:name=".MyService02"
            android:exported="true"></service>

其中MyService02就是继承了IntentService的类,但是这样还不行,会在这行报错,还需要在这个类中加上一个无参的构造函数

public MyService02(){
        super("nn");
    }

其中,super(“nn”)中的nn是取的一个名,这行代码必须要写,不然也是会报错的。

下面是完整的代码:(当然,这只是服务的启动,也就是本地服务。绑定也就是远程服务在下一篇博客中会写,请谅解,正在研究中)

MyService01 .JAVA

public class MyService01 extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("test","onBind");
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i("test","onCreate");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String data=intent.getStringExtra("data");
        Log.i("test","onStartCommand——"+data);
        new MyThread(startId);
        return super.onStartCommand(intent, flags, startId);
    }


    class MyThread extends Thread{
        private int startId;
        public MyThread(int startId){
            this.startId=startId;
        }
        @Override
        public void run() {
            super.run();
            for (int i = 0; i <10 ; i++) {
                Log.i("test","i="+i);
                SystemClock.sleep(1000);
            }
            //在线程全部完成后停止服务
            //不带参
            //stopSelf();
            //带参
            stopSelf(startId);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i("test","onDestroy");
    }

MyService02 .JAVA

public class MyService02 extends IntentService {

    public MyService02(){
        super("nn");
    }
    /**
     * Creates an IntentService.  Invoked by your subclass's constructor.
     *
     * @param name Used to name the worker thread, important only for debugging.
     */

    public MyService02(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        for (int i = 0; i <10 ; i++) {
            Log.i("test","i="+i);
            SystemClock.sleep(200);
        }
    }
}

AndroidManifest.xml

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

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

        <service
            android:name=".MyService02"
            android:exported="true"></service>
    </application>

以上,就是今天学到的皮毛,希望对大家会有帮助,如果有不妥的地方,望能在下方评论指出一下,或者私信给我,谢谢!愿每个人每天都能进步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值