文章目录

  • 一、startService
  • 二、bindService

上一篇: 《Android Service(一)概述、作用、生命周期》
下一篇:《Android Service(三)》望支持加快更新!

一、startService

效果图:需要配合图2查看效果,往下翻
图1

图2

图3

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btnStart,btnStop;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {btnStart = findViewById(R.id.btn_start);btnStop = findViewById(R.id.btn_stop);btnStart.setOnClickListener(this);btnStop.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn_start:Intent intent1 = new Intent(MainActivity.this,MyService.class);startService(intent1);break;case R.id.btn_stop:Intent intent2 = new Intent(MainActivity.this,MyService.class);stopService(intent2);break;}}
}

MyService.java

public class MyService extends Service {public MyService() {}//创建服务时,系统会调用此方法。如果服务已经运行,则不会调用此方法,所以该方法只调用一次@Overridepublic void onCreate() {super.onCreate();Log.i("Service","onCreate");}//当组件调用 startService()请求启动服务时,系统将调用此方法@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.i("Service","onStartCommand");return super.onStartCommand(intent, flags, startId);}//当服务不再使用且将被销毁时,比如:组件调用 stopService(),系统将会调用此方法@Overridepublic void onDestroy() {super.onDestroy();Log.i("Service","onDestroy");}//源码:将通信通道返回给服务//将客户端和服务端进行绑定,若不能绑定,则返回null@Overridepublic IBinder onBind(Intent intent) {return null;}
}

AndroidManifest.xml

        <serviceandroid:name=".MyService"android:enabled="true"android:exported="true"></service>

adtivity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20dp"android:layout_marginTop="80dp"android:layout_gravity="center"android:text="开始"/><Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="80dp"android:textSize="20dp"android:text="结束"/></LinearLayout>

源码:
链接:https://pan.baidu.com/s/112ub3K6HxtJ7YWjTveaV_A
提取码:dljv

二、bindService

效果图:需要配合图2查看效果,往下翻
图1

图2

图3

MyService.java

public class MyService extends Service {private MyBinder myBinder;private int num = 0;            //数字private Timer timer;private TimerTask timerTask;public MyService() {}//创建服务时,系统会调用此方法。如果服务已经运行,则不会调用此方法,所以该方法只调用一次@Overridepublic void onCreate() {super.onCreate();Log.i("MyBindService","onCreate");myBinder = new MyBinder();//定时器timer = new Timer();//定时器任务timerTask = new TimerTask() {@Overridepublic void run() {num++;}};//先立即执行 timerTask里的任务,然后每个两秒再继续去执行 timerTask里的任务。timer.schedule(timerTask,0,2000);}//将客户端和服务端进行通信绑定//return IBinder对象,这个对象所指的就是客户端和服务端的通信通道@Overridepublic IBinder onBind(Intent intent) {Toast.makeText(this,"绑定",Toast.LENGTH_SHORT).show();Log.i("MyBindService","onBind");return myBinder;}//解除绑定@Overridepublic boolean onUnbind(Intent intent) {Log.i("MyBindService","onUnbind");return super.onUnbind(intent);}//销毁@Overridepublic void onDestroy() {super.onDestroy();timer.cancel();timerTask.cancel();Log.i("MyBindService","onDestroy");}public class MyBinder extends Binder{public int getNum(){return num;}}}

AndroidManifest.xml

        <serviceandroid:name=".MyService"android:enabled="true"android:exported="true"></service>

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btnStart,btnGetValue,btnStop;private MyService.MyBinder myBinder;        //创建 Binder 对象  ->通信管道(通信媒介)private MyConnection myConnection;          //创建 ServiceConnection 对象   ->连接服务@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();myConnection = new MyConnection();}private void init() {btnStart = findViewById(R.id.btn_start);btnGetValue = findViewById(R.id.btn_get_value);btnStop = findViewById(R.id.btn_stop);btnStart.setOnClickListener(this);btnGetValue.setOnClickListener(this);btnStop.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn_start:Intent intent = new Intent(MainActivity.this,MyService.class);//意图,服务连接,绑定方式bindService(intent,myConnection, Service.BIND_AUTO_CREATE);break;case R.id.btn_get_value:android.util.Log.i("MyBindService","MyBinder 还存在吗? = " + myBinder);if (myBinder!=null)Toast.makeText(MainActivity.this,String.valueOf(myBinder.getNum()),Toast.LENGTH_SHORT).show();elseToast.makeText(MainActivity.this,"不好意思,服务已断开,请重新连接",Toast.LENGTH_SHORT).show();break;case R.id.btn_stop://解除绑定unbindService(myConnection);myBinder = null;break;}}public class MyConnection implements ServiceConnection {//服务连接@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {myBinder = (MyService.MyBinder) service;Log.i("MyBindService","onServiceConnected");}//服务断开连接//只会在出现异常时才会被调用@Overridepublic void onServiceDisconnected(ComponentName name) {Log.i("MyBindService","onServiceDisconnected");}}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn_start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20dp"android:layout_marginTop="80dp"android:layout_gravity="center"android:text="开始"/><Buttonandroid:id="@+id/btn_get_value"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="80dp"android:textSize="20dp"android:text="查看结果"/><Buttonandroid:id="@+id/btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="80dp"android:textSize="20dp"android:text="结束"/></LinearLayout>

源码:
链接:https://pan.baidu.com/s/1cid7MKWdgeIXe2Hz7Pef7w
提取码:rjqw

Android Service(二)Service的两种启动方式相关推荐

  1. android启动服务的生命周期,Android Service的两种启动方式以及生命周期

    Service的两种启动方式: 1.startService 2.bindService 注意: .在Android 5.0之后google出于安全的角度禁止了隐式声明Intent来启动Service ...

  2. service两种启动方式的区别

    service,中文名称是服务,服务是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互,而且还要长期运行的任务. 服务运行不依赖于任何用户界面,即使程序切换到后台,或者 ...

  3. Service的两种启动方式与区别

    Service的启动方式:startService() 和 bindService() startService() public abstract void startService(Intent ...

  4. tomcat两种启动方式

    tomcat的两种启动方式,第一种,直接点击bin/startup.bat启动,第二种注册成服务启动 1.通过startup.bat启动 指定jdk:在tomcat/bin/setclasspath. ...

  5. 【Django】项目中调用深度学习模型model.predict()(Django两种启动方式runserver和uwsgi的区别)

    目录 问题 测试 解决方法 Django两种启动方式runserver和uwsgi的区别 问题 部署含有深度学习模型的Django项目的uWSGI.Nginx服务器的时候,所有模块都可以正常运行,也可 ...

  6. (一)Service的生命周期和两种启动方式

    Service 一.概念 Service,也是Android四大组件之一.对照Activity的概念,Service属于后台运行的进程,并不需要界面,可以在后台长期运行,适合做比如播放音乐,下载等任务 ...

  7. Android中启动一个服务,Android服务的两种启动方式

    前言:Service是Android的四大组件之一,也是可执行的程序.服务是Android中实现程序后台运行的解决方案,非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.Service的启动 ...

  8. WIN8 与WIN7的64位及32位 分别对Legacy BIOS+MBR和UEFI+GPT两种启动方式和分区架构下的安装可行性分析

    微软系统.相关产品官方镜像下载:http://msdn.itellyou.cn/  关于MBR.GPT.ESP.MSR.EFI.UEFI和WIN8中SECURE BOOT的基础知识:   1.MBR分 ...

  9. Service的两种启动方式

    Service生命周期.png 第一种方式:通过StartService启动Service 通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService ...

  10. Service的两种启动方式,显示启动和隐式启动

    1.显式启动 Service端: 需要声明android:exported="true",这样别的APP才能访问. <service android:name=" ...

最新文章

  1. Android开发——布局性能优化的一些技巧(一)
  2. AI芯片行业发展的来龙去脉
  3. linux编辑器翻页,Linux的Vim编辑器的使用Part1:输入模式、移动光标和翻页
  4. 第三百七十七节,Django+Xadmin打造上线标准的在线教育平台—apps目录建立,以及数据表生成...
  5. 如何查看正在使用某个端口的应该程序
  6. 极限学习机和支持向量机_极限学习机I
  7. linux 删除提示没有那个文件或目录,rm 无法删除没有那个文件或目录
  8. [设计纹理素材]可爱手绘淡雅清新图案花样背景素材
  9. SplitContainer.SplitterDistance属性值设置应注意的与FixedPanel有关
  10. Kohana - PHP5框架 - 我看过的开源框架
  11. 网站内链外链批量抓取工具
  12. 都有哪些查找和下载英文文献的方法?
  13. phpstudy2020安装及简单使用教程
  14. Jquery获取选中 的TR元素 和 子元素td
  15. 兼职平台java设计_基于jsp的高校兼职平台-JavaEE实现高校兼职平台 - java项目源码...
  16. Java标识符规范书写规则
  17. XShell SecueCTR工具远程安装激活 连接使用
  18. cn2an:中文数字转阿拉伯数字
  19. Android屏幕监视方法,Android 关于手机屏幕的那些事
  20. MATLAB菜单选项在哪儿,matlab菜单之file菜单

热门文章

  1. Ubantu 安装SSH
  2. MySQL Innodb Engine -- 文件格式(innodb_file_format)
  3. SVN客户端下载和Svn visual studio插件
  4. Package.json 属性说明
  5. 一个自己主动依据xcode中的objective-c代码生成类关系图的神器
  6. 以下内容为Stackoverflow上整理以作纪录
  7. $, $, $$, $$, $$a (Run Script File)
  8. freeRADIUS下EAP测试
  9. 【往届已EI稳定检索】第二届计算机科学与管理科技国际学术会议,多主题征稿!...
  10. 【CV学习笔记】ROI与泛洪填充