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之间通信,通常这种情况下,我们使 ...
随机推荐
- MySQL中select * for update锁表的问题
MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...
- python : jquery实现左侧菜单
左侧菜单 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...
- Bellman-Ford
看来一千个acmer有一千个迪杰斯特拉,Bellman-Ford也是一样. 看了刘汝佳的bellman-ford,简直和spfa一模一样啊!!! 松弛n -1 次还是可以松弛,说明有负环; 刘汝佳写得 ...
- sublime 自动编译
Tools --> Build System --> New: { "shell_cmd": "cc.bat \"$file\"" ...
- Oracle的排序和限制条件(order by 和where)
1.Order by 子句的使用 select column.... from .... order by ... 1) Order by子句在整个 select语句中的位置: 始终位于最后 2) o ...
- php多维数组去除空元素
在php中去除数组中的空值可以使用array_filter() 这个函数 但是这个函数只能对一维数组起作用,一旦需要对多维数组去空就不行了,而且去除的空也包括(int)0,(string)0,使用起来 ...
- jQuery EasyUI教程之datagrid应用(一)
最近一段时间都在做人事系统的项目,主要用到了EasyUI,数据库操作,然后抽点时间整理一下EasyUI的内容. 这里我们就以一个简洁的电话簿软件为基础,具体地说一下datagrid应用吧 datagr ...
- Install Google Pinyin on Ubuntu 14.04
Install Google Pinyin on Ubuntu 14.04 I've been spending more and more time on Ubuntu and I'm not us ...
- memcache内存估算整理
参考文章: http://blog.csdn.net/tonyxf121/article/details/7906428 http://zhihuzeye.com/archives/2361 memc ...
- java程序调用存储过程
java程序调用存储过程 PL/SQL子程序,很多情况下是给应用程序来调用的,所有我们要掌握使用其他编程语言来调用我们写好的存储过程.下面我们介绍下使用java调用Oracle的存储过程. ...