Android中Service的使用
我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理
可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现。
《一》下面大体说一下我在极客学院跟着视频做的一个Service的小实现
1,首先点击左上角file->new往下拉,看到一个Service,创建MyService.java
这个就是我们的Service服务。
后续可以在这其中添加想要在后台运行的关键代码等。
2,首先创建项目后,在layout或中的xml中添加两个按钮btnStartSevice和btnStopSevice
程序中的Sevice是拼写错误,应该是Service,如果路人看到请不要打脸。。。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="examples.ouc.com.learnsevice2.MainActivity"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /> <Button
android:text="Start Sevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnStartSevice" /> <Button
android:text="Stop Sevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnStopSevice" />
</LinearLayout>
3,然后在MainActivity中配置这两个按钮。
package examples.ouc.com.learnsevice2; import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View; public class MainActivity extends AppCompatActivity { private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //通过intent可以实现代码复用
intent =new Intent(MainActivity.this,MyService.class); //简单的对两个按钮设置监听器。
findViewById(R.id.btnStartSevice).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //开始服务
startService(intent);
}
}); findViewById(R.id.btnStopSevice).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //停止服务
stopService(intent);
}
});
}
}
4,在MyService中进行相应的操作配置。
package examples.ouc.com.learnsevice2; import android.app.Service;
import android.content.Intent;
import android.os.IBinder; 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
//重写的onStartCommand在startService()运行时自动运行。
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(){
@Override public void run() {
super.run(); //通过设置输出一行代码来判断服务是否一直在运行中。
while(true){
System.out.println("sevice is running...");
try { //间隔2s输出一次
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}}
}
}.start();
return super.onStartCommand(intent, flags, startId);
}
}
5,最后,我们就可以发布到我们的AVD上进行运行了,点击开始服务,就可以在AS下面run运行状态框中看到
每隔两秒钟,就打印一行 sevice is running...
这个实例很简单,只是实现Service的后台运行,实际项目中,这个功能是十分重要的,希望自己日后用到时,能够想起来。。。菜鸟立flag
《二》service的绑定与声明周期
我们对上面的代码进行一些改动
1,首先,添加两个按钮,指示绑定服务,和解除绑定服务
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="examples.ouc.com.learnsevice2.MainActivity"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /> <Button
android:text="Start Sevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnStartSevice" /> <Button
android:text="Stop Sevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnStopSevice" />
<Button
android:text="Bind Sevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnBindSevice" />
<Button
android:text="Unbind Sevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnUnbindSevice" />
</LinearLayout>
2,然后我们在MainActivity中进行配置
package examples.ouc.com.learnsevice2; import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View; public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection { private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //通过intent可以实现代码复用
intent =new Intent(MainActivity.this,MyService.class); //简单的对两个按钮设置监听器。
findViewById(R.id.btnStartSevice).setOnClickListener(this); findViewById(R.id.btnStopSevice).setOnClickListener(this); findViewById(R.id.btnBindSevice).setOnClickListener(this);
findViewById(R.id.btnUnbindSevice).setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btnStartSevice:
startService(intent);
break;
case R.id.btnStopSevice:
stopService(intent);
break;
case R.id.btnBindSevice:
//bindService(Intent参数,服务的连接,服务的状态)
bindService(intent,this,Context.BIND_AUTO_CREATE);
break;
case R.id.btnUnbindSevice:
unbindService(this);
break;
}
} @Override
//服务被绑定成功后执行
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("Service connected!");
} @Override
//服务所在进城崩溃或者北杀掉时候执行。
public void onServiceDisconnected(ComponentName name) { }
}
3,然后在MyService中进行一些改动,方便我们查看是否什么时候创建与销毁。
package examples.ouc.com.learnsevice2; import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder; public class MyService extends Service { //通过设定一个flag,判断service是否仍然在运行
private boolean serviceRunning = false;
public MyService() {
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
//throw new UnsupportedOperationException("Not yet implemented");
return new Binder();
} @Override
//重写的onStartCommand在startService()运行时自动运行。
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("onStartCommand");
new Thread(){
@Override public void run() {
super.run(); //通过设置输出一行代码来判断服务是否一直在运行中。
//只有service仍在运行时,才会输出在这句话
while(serviceRunning){
System.out.println("sevice is running...");
try { //间隔2s输出一次
sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}}
}
}.start();
return super.onStartCommand(intent, flags, startId);
} @Override
public void onCreate() {
super.onCreate();
serviceRunning = true;
System.out.println("service create!");
} @Override
public void onDestroy() {
super.onDestroy();
System.out.println("service destory!");
serviceRunning = false;
}
}
4,然后我们可以发布,执行。
Android中Service的使用的更多相关文章
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- Android中Service的使用详解和注意点(LocalService)
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
- Android中Service的一个Demo例子
Android中Service的一个Demo例子 Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding. 本文,主要贴代码,不对Servic ...
- Android中Service和Activity之间的通信
启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...
- Android中Service 使用详解(LocalService + RemoteService)
Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...
- Android中Service深入学习
概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...
- (六)Android中Service通信
一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 ...
- android中service启动后台程序
Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作( perform long-running operations in the b ...
- Android中Service与多个Activity通信
由于项目需要,我们有时候需要在service中处理耗时操作,然后将结果发送给activity以更新状态.通常情况下,我们只需要在一个service与一个activity之间通信,通常这种情况下,我们使 ...
随机推荐
- python开发进阶之路(一)
哎!好久没有写博客了,怪想念的,今天听了偶像的讲解,好多以前感觉很模糊的概念今天一下子就明朗了.下面就来整理一下今天的收获 一.如何成为一名优秀的开发人员 1.1 得先对自己使用的开发语言了如指掌, ...
- 学习Linux系列--安装Ubuntu
最近学习Linux,使用虚拟机太不方便,于是购买了阿里云最便宜的云主机作为学习设备. 本系列文章记录了个人学习过程的点点滴滴. 学习Linux系列--安装Ubuntu 学习Linux系列--安装软件环 ...
- swith 好久不用都忘记了
switch 语句的格式: switch ( 整型或字符型变量 ) { case 变量可能值1 : 分支一; break; case 变量可能值2 : 分支二; break; case 变量可 ...
- 20160411002 经典SQL语句大全
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- C#编写最小化时隐藏为任务栏图标的 Window appllication.
1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小 ...
- redis 安装及相关问题解决
安装redis 下载,或者用scp命令从其他服务器拷贝 一.安装 解压:tar -zxvf redis-3.0.1.tar.gz 进入:cd redis-3.0.1 编译: make 二.解决问题 1 ...
- [原创] RT7 Lite win7旗舰版精简方案
[原创] RT7 Lite win7旗舰版精简方案 墨雪SEED 发表于 2016-1-26 21:23:54 https://www.itsk.com/thread-362912-1-5.html ...
- telnet: connect to address xxxxxxx: No route to host
在要连接的服务上执行iptables -F
- centos6.5安装sublime text 2
今天在看ueillemmx的博客的时候,看到一神级编辑器,随即安装试了试,我了个去,果然好用,自动补全,自动对齐,样样精通啊! 下面是根据ueillemmx的步骤在CentOS上安装Sublime的过 ...
- canvas初体验之加载图片
上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...