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中配置这两个按钮。

 1 package examples.ouc.com.learnsevice2;
 2
 3 import android.content.Intent;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.os.Bundle;
 6 import android.view.View;
 7
 8 public class MainActivity extends AppCompatActivity {
 9
10     private Intent intent;
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15
16         //通过intent可以实现代码复用
17         intent =new Intent(MainActivity.this,MyService.class);
18
19         //简单的对两个按钮设置监听器。
20         findViewById(R.id.btnStartSevice).setOnClickListener(new View.OnClickListener() {
21             @Override
22             public void onClick(View v) {
23
24                 //开始服务
25                 startService(intent);
26             }
27         });
28
29         findViewById(R.id.btnStopSevice).setOnClickListener(new View.OnClickListener() {
30             @Override
31             public void onClick(View v) {
32
33                 //停止服务
34                 stopService(intent);
35             }
36         });
37     }
38 }

4,在MyService中进行相应的操作配置。

 1 package examples.ouc.com.learnsevice2;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.IBinder;
 6
 7 public class MyService extends Service {
 8     public MyService() {
 9     }
10
11     @Override
12     public IBinder onBind(Intent intent) {
13         // TODO: Return the communication channel to the service.
14         throw new UnsupportedOperationException("Not yet implemented");
15     }
16
17     @Override
18     //重写的onStartCommand在startService()运行时自动运行。
19     public int onStartCommand(Intent intent, int flags, int startId) {
20         new Thread(){
21             @Override
22
23             public void run() {
24                 super.run();
25
26                 //通过设置输出一行代码来判断服务是否一直在运行中。
27                 while(true){
28                 System.out.println("sevice is running...");
29                 try {
30
31                     //间隔2s输出一次
32                     sleep(2000);
33                 } catch (InterruptedException e) {
34                     e.printStackTrace();
35                 }}
36             }
37         }.start();
38         return super.onStartCommand(intent, flags, startId);
39     }
40 }

5,最后,我们就可以发布到我们的AVD上进行运行了,点击开始服务,就可以在AS下面run运行状态框中看到

  每隔两秒钟,就打印一行 sevice is running...

 

这个实例很简单,只是实现Service的后台运行,实际项目中,这个功能是十分重要的,希望自己日后用到时,能够想起来。。。菜鸟立flag

《二》service的绑定与声明周期

我们对上面的代码进行一些改动

1,首先,添加两个按钮,指示绑定服务,和解除绑定服务

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:id="@+id/activity_main"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     android:paddingBottom="@dimen/activity_vertical_margin"
 8     android:paddingLeft="@dimen/activity_horizontal_margin"
 9     android:paddingRight="@dimen/activity_horizontal_margin"
10     android:paddingTop="@dimen/activity_vertical_margin"
11     android:orientation="vertical"
12     tools:context="examples.ouc.com.learnsevice2.MainActivity">
13
14     <TextView
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="Hello World!" />
18
19     <Button
20         android:text="Start Sevice"
21         android:layout_width="match_parent"
22         android:layout_height="wrap_content"
23         android:id="@+id/btnStartSevice" />
24
25     <Button
26         android:text="Stop Sevice"
27         android:layout_width="match_parent"
28         android:layout_height="wrap_content"
29         android:id="@+id/btnStopSevice" />
30     <Button
31         android:text="Bind Sevice"
32         android:layout_width="match_parent"
33         android:layout_height="wrap_content"
34         android:id="@+id/btnBindSevice" />
35     <Button
36         android:text="Unbind Sevice"
37         android:layout_width="match_parent"
38         android:layout_height="wrap_content"
39         android:id="@+id/btnUnbindSevice" />
40 </LinearLayout>

2,然后我们在MainActivity中进行配置

 1 package examples.ouc.com.learnsevice2;
 2
 3 import android.content.ComponentName;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.content.ServiceConnection;
 7 import android.os.IBinder;
 8 import android.support.v7.app.AppCompatActivity;
 9 import android.os.Bundle;
10 import android.view.View;
11
12 public class MainActivity extends AppCompatActivity implements View.OnClickListener, ServiceConnection {
13
14     private Intent intent;
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19
20         //通过intent可以实现代码复用
21         intent =new Intent(MainActivity.this,MyService.class);
22
23         //简单的对两个按钮设置监听器。
24         findViewById(R.id.btnStartSevice).setOnClickListener(this);
25
26         findViewById(R.id.btnStopSevice).setOnClickListener(this);
27
28         findViewById(R.id.btnBindSevice).setOnClickListener(this);
29         findViewById(R.id.btnUnbindSevice).setOnClickListener(this);
30     }
31
32     @Override
33     public void onClick(View v) {
34         switch (v.getId()){
35             case R.id.btnStartSevice:
36                 startService(intent);
37                 break;
38             case R.id.btnStopSevice:
39                 stopService(intent);
40                 break;
41             case R.id.btnBindSevice:
42                 //bindService(Intent参数,服务的连接,服务的状态)
43                 bindService(intent,this,Context.BIND_AUTO_CREATE);
44                 break;
45             case R.id.btnUnbindSevice:
46                 unbindService(this);
47                 break;
48         }
49     }
50
51     @Override
52     //服务被绑定成功后执行
53     public void onServiceConnected(ComponentName name, IBinder service) {
54         System.out.println("Service connected!");
55     }
56
57     @Override
58     //服务所在进城崩溃或者北杀掉时候执行。
59     public void onServiceDisconnected(ComponentName name) {
60
61     }
62 }

3,然后在MyService中进行一些改动,方便我们查看是否什么时候创建与销毁。

 1 package examples.ouc.com.learnsevice2;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7
 8 public class MyService extends Service {
 9
10     //通过设定一个flag,判断service是否仍然在运行
11     private boolean serviceRunning = false;
12     public MyService() {
13     }
14
15     @Override
16     public IBinder onBind(Intent intent) {
17         // TODO: Return the communication channel to the service.
18         //throw new UnsupportedOperationException("Not yet implemented");
19         return new Binder();
20     }
21
22     @Override
23     //重写的onStartCommand在startService()运行时自动运行。
24     public int onStartCommand(Intent intent, int flags, int startId) {
25         System.out.println("onStartCommand");
26         new Thread(){
27             @Override
28
29             public void run() {
30                 super.run();
31
32                 //通过设置输出一行代码来判断服务是否一直在运行中。
33                 //只有service仍在运行时,才会输出在这句话
34                 while(serviceRunning){
35                 System.out.println("sevice is running...");
36                 try {
37
38                     //间隔2s输出一次
39                     sleep(2000);
40                 } catch (InterruptedException e) {
41                     e.printStackTrace();
42                 }}
43             }
44         }.start();
45         return super.onStartCommand(intent, flags, startId);
46     }
47
48     @Override
49     public void onCreate() {
50         super.onCreate();
51         serviceRunning = true;
52         System.out.println("service create!");
53     }
54
55     @Override
56     public void onDestroy() {
57         super.onDestroy();
58         System.out.println("service destory!");
59         serviceRunning = false;
60     }
61 }

4,然后我们可以发布,执行。

时间: 2024-11-05 14:51:36

Android中Service的使用的相关文章

【Android】Android中Service类onStartCommand的返回值有关问题(转)

@Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("---------->>onStartCommand2"); return super.onStartCommand(intent, flags, startId); } Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象

Android中Service的一个Demo例子

Android中Service的一个Demo例子  Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding.  本文,主要贴代码,不对Service做过多讲解.  代码是从网上找的一个例子,Copy下来发现代码不完全正确,稍微修改了下.  AndroidManifest.xml <application android:icon="@drawable/ic_launcher" android:label="@stri

Android中Service生命周期

这几天面试的时候,反复被问到一个关于Service的问题. 之前做了一个APP.有一个应用场景是,需要开机启动一个Service,在Service中另开一个线程,去对比用户配置中的时间,作出及时提醒. 然后面试的时候在描述该做法时就被问到一个问题,如果Service被系统或者其他应用kill了怎么办?我当时的回答是,在onDestroy中去处理.面试官说,onDestroy并不会被调用. 面试的详情暂且不表,在后期会专门写面经.现在讨论这个问题,Service被kill后生命周期是怎样的. OK

Android中Service类onStartCommand的返回值问题

Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理.然后我们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的作用. 从Android官方文档中,我们知道onStartCommand有4种返回值: START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但

Android中Service的详细解释与使用

Android中Service的详细解释与使用: 概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 作用: (1).它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如A

(六)Android中Service通信

一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected; import android.app.Activity;import android.content.Intent;import android.os.Bundle

android中Service使用详解

service用于长期在后台处理任务,而不需要对用户可见. service有2种基本的启动方式: startService():使用这种方式,来进行单一的任务,不需要返回结果给调用者 bindService():与上面的相反. 下面是一些关于服务的重要说明,非常值得详细了解的: 继承service,实现自己的service: 在manifest中声明service,服务位于主线程,并不会创建自己的子线程. 下面是一些重写的方法: onCreate();当服务被创建时调用,只调用一次. onSta

Android中Service(服务)的使用

进程的优先级---------------------------------进程的优先级表现为:优先级越高,该进程的“生命力”就越强,反之,则越低,而低优先级的进程更容易被Android系统清除.进程的优先级从高到低为:1. 前台进程2. 可见进程3. 服务进程4. 后台进程5. 空进程 Service(服务)---------------------------------Service是Android系统的核心组件,由Android创建.维护和管理.Service需要在AndroidMan

Android中Service概述

Service是Android中一种很重要的组件,一般来说有两种用途:用Service执行长期运行的操作,并且与用户没有UI界面的交互:某个应用程序的Service可以被其他应用程序的组件调用以便提供更广泛的使用.要想使得自己写的Service能够正常运行,必须在AndroidManifest.xml中通过标签注册Service,类似于通过标签注册Activity一样.有两种方式使用Service,一种是通过Context类的startService方法启动Service,另一种是通过Conte