android之路,service学习

简介: Android之路service Service服务,运行于后台。使用方法1:startService 1、 编写一个类继承service 2、 复写方法onStartCommand、onBind、onCreate、onDestroy 3、 在mainfest中声明服务 4、 启动服务 5、 关闭服务 用户推出后服务依然在运行,mainactivity。

Android之路service

Service服务,运行于后台。使用方法1startService

1、 编写一个类继承service

2、 复写方法onStartCommandonBindonCreateonDestroy

3、 mainfest中声明服务

4、 启动服务

5、 关闭服务

用户推出后服务依然在运行,mainactivityJava

public class MainActivity extends Activity

{

    private Button btnStartService;

    private Button btnStopService;

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       btnStartService = (Button)findViewById(R.id.btn1);

       btnStopService = (Button)findViewById(R.id.btn2);

       btnStartService.setOnClickListener(listener);

       btnStopService.setOnClickListener(listener);

    }

    private OnClickListener listener = new OnClickListener()

    {

       @Override

       public void onClick(View v)

       {

           Intent intent = new Intent(MainActivity.this, ExampleService.class);     //通过intent传递参数

           Button btn = (Button)v;

           // TODO Auto-generated method stub

           switch(btn.getId())

           {

           case R.id.btn1:

              startService(intent);//启动服务

              break;

           case R.id.btn2:

              stopService(intent);//关闭服务

              break;

           default:

                  break;

           }

       }

    };

}

ExampleService.java

public class ExampleService extends Service

{

    /* (non-Javadoc)

     * @see android.app.Service#onCreate()

     */

    @Override

    public void onCreate()

    {

       // TODO Auto-generated method stub

       super.onCreate();

    }

    /* (non-Javadoc)

     * @see android.app.Service#onDestroy()

     */

    @Override

    public void onDestroy()

    {

       // TODO Auto-generated method stub

       super.onDestroy();

    }

    /* (non-Javadoc)

     * @see android.app.Service#onStartCommand(android.content.Intent, int, int)

     */

    @Override

    public int onStartCommand(Intent intent, int flags, int startId)

    {

       // TODO Auto-generated method stub

       return super.onStartCommand(intent, flags, startId);

    }

    @Override

    public IBinder onBind(Intent arg0)

    {

       // TODO Auto-generated method stub

       return null;

    }

运行结果

点击start开启服务,然会点击右侧的返回按钮,在系统里查看正在运行的服务

 

 

Bound Service:允许其他组件绑定到这个service,可以发送请求,也可以接受请求。Bound service仅仅在服务于其他组件时存在,不能独自无期限的存在后台。

创建bound service,必须提供一个binder对象,客户端使用这个对象与服务交互,有三种定义方式:

1、 扩展binder类(进程内交互)

A、在service类中创建一个binder实例,包含客户端能调用的公共方法,返回当前服务对象

B、在onBind方法中返回binder实例

C、在客户端从onServiceConnected方法中获取binder实例

2、 使用messenger(进程间交互)

3、 使用AIDLandroid interface delinition language)(进程间交互)

ExampleService.Java

public class ExampleService extends Service

{

    public static String TAG = null;

    private MyBinder binder = new MyBinder();

    public class MyBinder extends Binder

    {//创建了binder实例,返回当前服务对象

       public ExampleService getService()

       {

           return ExampleService.this;

       }

    }

    @Override

    public IBinder onBind(Intent arg0)

    {

       // TODO Auto-generated method stub

       return binder;//  返回来binder实例

    }

    public void method()

    {//客户端可以调用的一个公共的方法

       Log.i(TAG, "method()");

    }

}

 

Mainactivitu.java:

public class MainActivity extends Activity

{

    private Button btnStartService;

    private Button btnStopService;

    private static Boolean isConnected = false;

    @Override

    protected void onCreate(Bundle savedInstanceState)

    {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

       btnStartService = (Button)findViewById(R.id.btn1);

       btnStopService = (Button)findViewById(R.id.btn2);

       btnStartService.setOnClickListener(listener);

       btnStopService.setOnClickListener(listener);

      

    }

    private OnClickListener listener = new OnClickListener()

    {

       @Override

       public void onClick(View v)

       {

           Button btn = (Button)v;

           // TODO Auto-generated method stub

           switch(btn.getId())

           {

           case R.id.btn1:

              bindsv(); //开启服务

              break;

           case R.id.btn2:

              onbind();    //关闭服务

              break;

           default:

                  break;

           }

       }

    };

    private void bindsv()

    {

       // TODO Auto-generated method stub

       Intent intent = new Intent(MainActivity.this, ExampleService.class);

       bindService(intent, conn, Context.BIND_AUTO_CREATE);

       //开启

    }

 

    private void onbind()

    {

       // TODO Auto-generated method stub

       if(isConnected)

       {

           unbindService(conn);  //关闭

       }

    }

    private ServiceConnection conn = new ServiceConnection()

    {//内部类,实现conn接口

       @Override

       public void onServiceDisconnected(ComponentName name)

       {

           // TODO Auto-generated method stub

           isConnected = false;

       }

      

       @Override

       public void onServiceConnected(ComponentName name, IBinder binder)

       {

           // TODO Auto-generated method stub

           MyBinder mybinder = (MyBinder)binder;//获取binder

           ExampleService service = mybinder.getService();//提取服务

           service.method();//调用服务的方法

           isConnected = true;

       }

    };

    @Override

    public boolean onCreateOptionsMenu(Menu menu)

    {

       // Inflate the menu; this adds items to the action bar if it is present.

       getMenuInflater().inflate(R.menu.main, menu);

       return true;

    }

 

}

相关文章
|
7月前
|
Android开发
Android 11 添加Service服务SELinux问题
Android 11 添加Service服务SELinux问题
376 1
|
7月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
158 0
|
3月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
6月前
|
调度 Android开发
43. 【Android教程】服务:Service
43. 【Android教程】服务:Service
61 2
|
2月前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
55 0
|
7月前
|
Android开发
Android Service Call /dev/xxx SELinux
Android Service Call /dev/xxx SELinux
116 1
|
7月前
|
监控 Unix 应用服务中间件
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器
|
3月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
4月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
281 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
4月前
|
编解码 网络协议 Android开发
Android平台GB28181设备接入模块实现后台service按需回传摄像头数据到国标平台侧
我们在做Android平台GB28181设备对接模块的时候,遇到这样的技术需求,开发者希望能以后台服务的形式运行程序,国标平台侧没有视频回传请求的时候,仅保持信令链接,有发起视频回传请求或语音广播时,打开摄像头,并实时回传音视频数据或接收处理国标平台侧发过来的语音广播数据。