我个人的理解是:我们平时使用的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的使用的更多相关文章

  1. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  2. Android中Service的使用详解和注意点(LocalService)

    Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...

  3. Android中Service的一个Demo例子

    Android中Service的一个Demo例子  Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding.  本文,主要贴代码,不对Servic ...

  4. Android中Service和Activity之间的通信

    启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...

  5. Android中Service 使用详解(LocalService + RemoteService)

    Service 简介: Service分为本地服务(LocalService)和远程服务(RemoteService): 1.本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外L ...

  6. Android中Service深入学习

    概述 1.当用户在与当前应用程序不同的应用程序时,Service可以继续在后台运行. 2.Service可以让其他组件绑定,以便和它交互并进行进程间通信. 3.Service默认运行在创建它的应用程序 ...

  7. (六)Android中Service通信

    一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 ...

  8. android中service启动后台程序

    Service是Android中一个类,它是Android四大组件之一,使用Service可以在后台执行长时间的操作( perform long-running operations in the b ...

  9. Android中Service与多个Activity通信

    由于项目需要,我们有时候需要在service中处理耗时操作,然后将结果发送给activity以更新状态.通常情况下,我们只需要在一个service与一个activity之间通信,通常这种情况下,我们使 ...

随机推荐

  1. python开发进阶之路(一)

    哎!好久没有写博客了,怪想念的,今天听了偶像的讲解,好多以前感觉很模糊的概念今天一下子就明朗了.下面就来整理一下今天的收获 一.如何成为一名优秀的开发人员 1.1  得先对自己使用的开发语言了如指掌, ...

  2. 学习Linux系列--安装Ubuntu

    最近学习Linux,使用虚拟机太不方便,于是购买了阿里云最便宜的云主机作为学习设备. 本系列文章记录了个人学习过程的点点滴滴. 学习Linux系列--安装Ubuntu 学习Linux系列--安装软件环 ...

  3. swith 好久不用都忘记了

    switch 语句的格式: switch ( 整型或字符型变量 ) { case 变量可能值1 :   分支一; break; case 变量可能值2 :   分支二; break; case 变量可 ...

  4. 20160411002 经典SQL语句大全

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...

  5. C#编写最小化时隐藏为任务栏图标的 Window appllication.

    1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小 ...

  6. redis 安装及相关问题解决

    安装redis 下载,或者用scp命令从其他服务器拷贝 一.安装 解压:tar -zxvf redis-3.0.1.tar.gz 进入:cd redis-3.0.1 编译: make 二.解决问题 1 ...

  7. [原创] RT7 Lite win7旗舰版精简方案

    [原创] RT7 Lite win7旗舰版精简方案 墨雪SEED 发表于 2016-1-26 21:23:54  https://www.itsk.com/thread-362912-1-5.html ...

  8. telnet: connect to address xxxxxxx: No route to host

    在要连接的服务上执行iptables -F

  9. centos6.5安装sublime text 2

    今天在看ueillemmx的博客的时候,看到一神级编辑器,随即安装试了试,我了个去,果然好用,自动补全,自动对齐,样样精通啊! 下面是根据ueillemmx的步骤在CentOS上安装Sublime的过 ...

  10. canvas初体验之加载图片

    上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...