Android四大组件之一Service介绍-android学习之旅(十二)
基本概念:
service是android四大组件之一,运行在后台执行耗时操作,并不提供用户界面。其他组件如acticity可以通过startService启动该组件,也可以通过bindService启动并把绑定该组件进行通信。
使用场景
后台下载文件,以及播放音乐等
注意
service运行在主线程中,他不会创建属于自己的线程,也不是运行在独立的线程中,所以在使用的时候,需要自己创建线程,而不应该直接使用,这样会造成ANR错误。
service的两种形式
started service
其他组件如activity等通过stratService等启动该组件,拥有独立的生命周期,不依赖启动他的组件。
bound service
其他组件为了与service建立一个长时间的连接通过bindService来建立连接。并能与之交互(发送请求,接受响应)。它的生命周期依赖绑定他的组件,一但解除绑定就会消亡。
两个service的代码:
package peng.liu.testview;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
public MyService() {
}
@Override
public void onCreate() {
super.onCreate();
ServiceClass sc = new ServiceClass();
sc.start();
}
private class ServiceClass extends Thread{
@Override
public void run() {
super.run();
for (int i = 0;i< 1000;i++){
System.out.println("hello"+i);
try {
Thread.sleep(1000);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
另外一个service是
package peng.liu.testview;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import java.util.Random;
public class MyService2 extends Service {
public MyService2() {
}
//第一步实现binder子类
public class LiuBinder extends Binder {
//创建一个公共方法,返回service实例
public MyService2 getService(){
return MyService2.this;
}
}
//onBind方法返回一个LiuBinder
private LiuBinder binder = new LiuBinder();
@Override
public IBinder onBind(Intent intent) {
return binder;
}
//创建自定义的业务方法,必须是公共的
public int getRandom(){
Random random = new Random();
return random.nextInt(100);
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("service done");
}
}
主类的代码:
package peng.liu.testview;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener{
private Button send,reg,unReg;
private MyService2 service;
boolean isBound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.send).setOnClickListener(this);
findViewById(R.id.reg).setOnClickListener(this);
findViewById(R.id.unReg).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.send:
startService(new Intent(MainActivity.this,MyService.class));
break;
case R.id.reg:
Intent intent = new Intent(MainActivity.this,MyService2.class);
bindService(intent,conn,BIND_AUTO_CREATE);
}
Toast.makeText(MainActivity.this,"随机数是"+service.getRandom(),Toast.LENGTH_LONG).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
}
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
MyService2.LiuBinder binder = (MyService2.LiuBinder)iBinder;
service = binder.getService();
isBound = true;
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
isBound = false;
}
};
}
注册service代码:
<service
android:name=".MyService"
android:enabled="true"
android:exported="true" >
</service>
<service
android:name=".MyService2"
android:enabled="true"
android:exported="true" >
</service>
Android四大组件之一Service介绍-android学习之旅(十二)的更多相关文章
- Android四大组件之Service
Android四大组件之Service Android支持服务的概念,服务是在后台运行的组件,没有用户界面,Android服务可用有与活动独立的生命周期.Android支持两种类型的服务: 本地服务: ...
- 【Android开发日记】之入门篇(五)——Android四大组件之Service
这几天忙着驾校考试,连电脑都碰不到了,今天总算告一段落了~~Service作为Android的服务组件,默默地在后台为整个程序服务,辅助应用与系统中的其他组件或系统服务进行沟通.它跟Activity的 ...
- Android成长日记-Android四大组件之Service组件的学习
1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...
- Android四大组件之一 -- Service详解
相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Android程序员如果连Service都没听说过的话,那确实也太逊了.Service作为Android四大组件之一,在每一个应用程序 ...
- Android四大组件:Service
前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍对Service进行全面介绍(基础认识.生命周期.使用和应用场景) 目录 目录 1. 基础知识 定义:服务,属于Androi ...
- Android四大组件之Service浅见
Service 是Android四大组件之一,可以在不显示界面的情况下在后台运行.还有一个作用是通过AIDL来实现进程间通信. Service的启动方式 Service的启动方式有两种,startSe ...
- Android 四大组件之service与Broadcast
Android 四大组件之一:service: Service有五个生命周期:onCreat,onStartCommand, onBind,onUnbind, onDestroy 主要有绑定和非绑定两 ...
- Android 四大组件之 Service(一)
Service是Android中四大组件之一,在Android开发中起到非常重要的作用,它运行在后台,不与用户进行交互. 1.Service的继承关系: java.lang.Object → andr ...
- Android 四大组件之Service
---恢复内容开始--- 1,Service的生命周期
随机推荐
- 【USACO15FEB】审查(黄金)Censoring (Gold)
题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they h ...
- Linux下如何进入中文目录
给Linux安装图形用户界面之后,会在工作目录中生成图片, 文档, 下载........等中文目录,以前不知道如何进入这些目录,感觉也没有必要,今天在火狐上下载了一个软件,默认在下载这个目录当中,实在 ...
- 手写JAVA虚拟机(三)——搜索class文件并读出内容
查看手写JAVA虚拟机系列可以进我的博客园主页查看. 前面我们介绍了准备工作以及命令行的编写.既然我们的任务实现命令行中的java命令,同时我们知道java命令是将class文件(字节码)转换成机器码 ...
- 我与android的缘分
android的开始 本人是一名大三的学生,大一大二主要学习的是php后台开发,在大一的时候做过一些小的网站系统,也参加过一些大学生计算机相关的比赛.这次开始着手于安卓开发,也是一时的兴起.因为跟我们 ...
- gravity和layout_gravity的区别
一.gravity和layout_gravity相同处 两者都是设置对齐方式的属性.内部的属性值相同. 根据英文意思也能理解其中的意思.如center_horizontal表示在水平方向上的位置为中间 ...
- R语言使用 multicore 包进行并行计算
R语言是单线程的,如果数据量比较大的情况下最好用并行计算来处理数据,这样会获得运行速度倍数的提升.这里介绍一个基于Unix系统的并行程序包:multicore. 我们用三种不同的方式来进行一个简单的数 ...
- PHP 5 String 函数
PHP 5 String 函数 PHP String 函数是 PHP 核心的组成部分.无需安装即可使用这些函数. 函数 描述 addcslashes() 返回在指定的字符前添加反斜杠的字符串. add ...
- Python3 数字(Number)
Python 解释器可以作为一个简单的计算器:您可以在解释器里输入一个表达式,它将输出表达式的值. 表达式的语法很直白: +, -, * 和/ 和在许多其它语言(如Pascal或C)里一样:括号可以用 ...
- 粗糙的es6 -> es5转换正则集
(r'() => {}','function () {return {}}'), # (r'\{\.\.\.(.+?)\}','Object.assign({}, \\1)') , # (r'( ...
- 序列化战争:主流序列化框架Benchmark
序列化战争:主流序列化框架Benchmark GitHub上有这样一个关于序列化的Benchmark,被好多文章引用.但这个项目考虑到完整性,代码有些复杂.为了个人学习,自己实现了个简单的Benchm ...