Service的基本使用

复习四大组件中的Service

导语:

刚面试了一家android岗位,心里有点慌呀,不过把之前重要的基础知识捡捡应该应付日常开发没什么问题吧。哈哈,要努力学习了。

Service的定义

负责消耗长时间、持续时间的工作任务,且不提供显示界面。
Service与Activity运行在同一个线程中,如果直接在Service里运行耗时操作,则会ANR(通常是因为Activity响应时间超过5秒,或者BroadcastReceiver的响应时间超过5秒)

开发Service

a)需要在AndroidManifest.xml中注册
b ) 应该使用Intent激活

Service的生命周期

a)onCreate->onStartCommand->onDestory
启动与停止Service的实际场景之一:在Activity的onCreate或者某个响应事件中使用startService()激活Service,并在Activity的onDestory方法中使用stopService()停止Service,或者在Service中执行完任务以后调用stopService中执行完任务以后调用stopSelf()以关闭自身Service。
b )onStartCommand返回值详解,
START_STICKY:(默认值)粘性的
START_NOT_STICKEY:非粘性的,当Service被意外/强行关闭以后,不会自己重新启动
START_REDRLIVER_INTENT:粘性的重新传递Intent,当Service被意外/强行关闭以后,自动重新启动,且重新得到intent参数。
START_STICKEY_COMPATIBILITY:兼容模式的粘性

代码实现

共两个类,一个是MainActivity.java,一个是MyService.java

package com.example.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button start_service;
    private Button stop_service;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setView();
        setListiner();
    }

    private void setListiner() {
        start_service.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent =new Intent();
                intent.setClass(MainActivity.this,MyService.class);
                startService(intent);
            }
        });

        stop_service.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent =new Intent();
                intent.setClass(MainActivity.this,MyService.class);
                stopService(intent);
            }
        });
    }

    private void setView() {
        start_service=(Button)findViewById(R.id.btn_startService);
        stop_service=(Button)findViewById(R.id.btn_stopService);
    }
}
package com.example.myapplication;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import static android.content.ContentValues.TAG;

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        Log.e(TAG, "onCreate: ");
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG, "onStartCommand: ");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy: " );
        super.onDestroy();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值