Android 学习之路 四大组件之service

小编 2026-06-25 阅读:1953 评论:0
1 进程概念介绍   四大组件都是运行在主线程   Android中的服务 也是在后台运行  可以理解成是在后台运行并且是没有界面的Activity   (1)Foreground process 前...

1 进程概念介绍

  四大组件都是运行在主线程

  Android中的服务 也是在后台运行  可以理解成是在后台运行并且是没有界面的Activity

  (1)Foreground process 前台进程  用户正在交互  可以理解成相 当于 Activity执行onResume方法

  (2)Visible process 可视进程 用户没有在交互 但用户还一直能看得见页面 相当于Activity执行了onPause方法 

  (3)Service Process  服务进程  通过startService()开启了一个服务

  (4)Background process  后台进程  当前用户看不见页面 相当于Activity执行了onStop方法

  (5)Empty process 空进程 不回维持任何组件(用户一直按返回键 任务栈销毁,但进程还在)

2 start方式开启服务的特点

服务的生命周期

oncreate()

onstartCommand()

ondestory()

  服务是在后台运行 可以理解成是没有界面的activity

  定义四大组件的方式都是一样的  

  定义一个类继承Service

   特点:

  (1)服务通过startservice方式开启 第一次点击按钮开启服务 会执行服务的onCreate 和 onStart方法

  (2)如果第二次开始在点击按钮开启服务 服务之后执行onStrat方法

  (3)服务被开启后 会在设置页面里面的 running里面找得到这个服务 

  (4)startservice 方式开启服务 服务就会在后台长期运行 直到用户手工停止 或者调用StopService方法 服务才会被销毁

3.bindService

为了调用服务中的方法引入bindservice

(1)服务通过bindService方式开启 第一次点击按钮开启服务 会执行服务的onCreate 和 onBind方法

  (2)如果第二次在点击按钮开启服务 服务无响应

  (3)当onbind方法返回的值为null时,onserviceConnected方法不执行的

  (4)不求同日生 但求同日死  activity和服务之间

 (5)服务不可以多次解绑,多次解绑会异常

(6)通过bindService开启的服务在设置页面的正在运行中无法找到 相当于一个隐形服务

4.百度音乐盒小案例 (不实现具体功能只练习bindservice 混合开启服务)

业务需求:该服务既要持续在后台运行 也要调用服务中的方法

1.先调用startService开启服务

2.调用bindService绑定服务 传递方法

3.unBindService解绑服务

public class MainActivity extends AppCompatActivity {
    private UseMusic um;
    private MainActivity.myConn myConn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //混合开启服务
        //1.先start开启服务
        Intent intent = new Intent(this, MusicService.class);
        startService(intent);
        //2.用bind开启服务 可以传递ibinder 从而可以调用方法
        myConn = new myConn();
        bindService(intent,myConn,BIND_AUTO_CREATE);

    }
    public class myConn implements ServiceConnection{




        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
             um = (UseMusic) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }
    public void play(View v){
        um.callPlay();

    }
    public void pause(View v){
       um.callPause();

    }
    public void continuePlay(View v){
        um.callRePlay();

    }


    @Override
    protected void onDestroy() {
        //解绑
        unbindService(myConn);
        super.onDestroy();
    }

}
public class MusicService extends Service {
    //一定要记得在onbind方法中把mybinder传递过去
    @Override
    public IBinder onBind(Intent intent) {
        return new myBinder();
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
    public void play(){
        System.out.println(\"播放\");
    }
    public void pause(){
        System.out.println(\"暂停\");
    }
    public void replay(){
        System.out.println(\"继续播放\");
    }
//定义一个Ibinder类的实现类(中间人对象 可以在外面的类中调用服务中的方法)继承一个接口的实现子类
    public class myBinder extends Binder implements UseMusic{


    @Override
    public void callPlay() {
        play();

    }

    @Override
    public void callPause() {
        pause();
    }

    @Override
    public void callRePlay() {
        replay();
    }
}
}
//在接口中暴漏想要暴露的方法
public interface UseMusic {
    public void callPlay();
    public void callPause();
    public void callRePlay();
}

 

aidl进程间的通信

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表