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之间通信,通常这种情况下,我们使 ...
随机推荐
- Asp.Net在多线程环境下的状态存储问题
在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...
- hash命令
什么是hash ? 在网上找了好久都没找到简截有力的说明.hash 我把它当成是集合,一个hash 就是一个集合,里面字段对应一个元素,元素不重复,字段都不一样. 简单hash 命令 1.hset 哈 ...
- 2015弱校联盟(1) -A. Easy Math
A. Easy Math Time Limit: 2000ms Memory Limit: 65536KB Given n integers a1,a2,-,an, check if the sum ...
- easyui datagrid tooltip
$('#dg').datagrid('getPanel').find('.easyui-tooltip').each(function(){ var index = parseInt($(this). ...
- Linux 各文件夹介绍
http://www.cnblogs.com/amboyna/archive/2008/02/16/1070474.html linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命 ...
- Response.BinaryWrite()方法输出二进制图像
protected void Page_Load(object sender, EventArgs e) { FileStream fs = new FileStream(Server.MapPath ...
- python打怪之路【第三篇】:利用Python实现三级菜单
程序: 利用Python实现三级菜单 要求: 打印省.市.县三级菜单 可返回上一级 可随时退出程序 coding: menu = { '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, ' ...
- Html5 Canvas核心技术(图形,动画,游戏开发)--基础知识
基础知识 canvas 元素可以说是HTML5元素中最强大的一个,他真正的能力是通过canvas的context对象表现出来的.该环境对象可以从canvas元素身上获得. <body> & ...
- poj3301Texas Trip(三分)
链接 这题还真没看出来长得像三分.. 三分角度,旋转点. 最初找到所有点中最左边.右边.上边.下边的点,正方形边长为上下距离和左右距离的最大值,如图样例中的四个点(蓝色的),初始正方形为红色的正方形. ...
- 能源项目xml文件 -- springMVC-servlet.xml -- context:component-scan
<context:component-scan base-package="com.xindatai.ibs" use-default-filters="false ...