我个人的理解是:我们平时使用的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. Asp.Net在多线程环境下的状态存储问题

    在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...

  2. hash命令

    什么是hash ? 在网上找了好久都没找到简截有力的说明.hash 我把它当成是集合,一个hash 就是一个集合,里面字段对应一个元素,元素不重复,字段都不一样. 简单hash 命令 1.hset 哈 ...

  3. 2015弱校联盟(1) -A. Easy Math

    A. Easy Math Time Limit: 2000ms Memory Limit: 65536KB Given n integers a1,a2,-,an, check if the sum ...

  4. easyui datagrid tooltip

    $('#dg').datagrid('getPanel').find('.easyui-tooltip').each(function(){ var index = parseInt($(this). ...

  5. Linux 各文件夹介绍

    http://www.cnblogs.com/amboyna/archive/2008/02/16/1070474.html linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命 ...

  6. Response.BinaryWrite()方法输出二进制图像

    protected void Page_Load(object sender, EventArgs e) { FileStream fs = new FileStream(Server.MapPath ...

  7. python打怪之路【第三篇】:利用Python实现三级菜单

    程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...

  8. Html5 Canvas核心技术(图形,动画,游戏开发)--基础知识

    基础知识 canvas 元素可以说是HTML5元素中最强大的一个,他真正的能力是通过canvas的context对象表现出来的.该环境对象可以从canvas元素身上获得. <body> & ...

  9. poj3301Texas Trip(三分)

    链接 这题还真没看出来长得像三分.. 三分角度,旋转点. 最初找到所有点中最左边.右边.上边.下边的点,正方形边长为上下距离和左右距离的最大值,如图样例中的四个点(蓝色的),初始正方形为红色的正方形. ...

  10. 能源项目xml文件 -- springMVC-servlet.xml -- context:component-scan

    <context:component-scan base-package="com.xindatai.ibs" use-default-filters="false ...