Anroid四大组件service之本地服务的示例代码

服务是Android四大组件之一,与Activity一样,代表可执行程序。但Service不像Activity有可操作的用户界面,它是一直在后台运行。用通俗易懂点的话来说:

如果某个应用要在运行时向用户呈现可操作的信息就应该选择Activity,如果不是就选择Service。

Service的生命周期如下:

Service只会被创建一次,也只会被销毁一次。那么,如何创建本地服务呢?

实现代码如下:

package temp.com.androidserivce;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import android.support.annotation.Nullable;
import android.util.Log;

/**
 * Created by Administrator on 2017/8/18.
 */

public class Myservice extends Service {
  @Override
  public void onCreate() {
    Log.i("test", "服务被创建");
    super.onCreate();
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {

    Log.i("test", "服务被启动");
    new Thread(new myRunnable(startId)).start();
    return super.onStartCommand(intent, flags, startId);

  }

  @Override
  public void onDestroy() {
    Log.i("test", "服务被销毁");
    super.onDestroy();
  }

  @Nullable
  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

  class myRunnable implements Runnable {
    int startId;

    public myRunnable(int startId) {
      this.startId = startId;
    }

    @Override
    public void run() {
      for (int i = 0; i < 10; i++) {
        SystemClock.sleep(1000);
        Log.i("test", i + "");
       }
      //停止服务
      //stopSelf();
      stopSelf(startId);
      //当用无参数的停止服务时,将会销毁第一次所启动的服务;
      //当用带参数的停止服务时,将会销毁最末次所启动的服务;

    }
  }
}

要声明服务,就必须在manifests中进行配置

<manifest ... >
 ...
 <application ... >
   <service android:name=".Myservice" android:exported="true"/>

 ... 

</application>

 </manifest>

android:exported="true" 设置了这个属性就表示别人也可以使用你的服务。

还有一个需要注意的小点,在Myservice中可以看见我启动时用了一个子线程去帮我实现工作,那么我为什么没有直接把for循环的那段代码写在onStartCommand方法中呢,是因为写在onStartCommand中将会报ANR程序无响应的错误。就是当你所有的事情都去交给主线程做时,就会造成主线程内存溢出,它就会炸了。这个时候也可以用IntentService来取代Service。

package temp.com.androidserivce;

import android.app.IntentService;
import android.content.Intent;
import android.os.SystemClock;
import android.util.Log;

/**
 * Created by Administrator on 2017/8/18.
 */

public class MyService2 extends IntentService {
  public MyService2() {
    super("");
  }
  public MyService2(String name) {
    super(name);
  }

  @Override
  protected void onHandleIntent(Intent intent) {
    for (int i = 0; i <10 ; i++) {
      SystemClock.sleep(1000);
      Log.i("test",i+"");
    }
  }
}

使用这个相对而言会比较简单。IntentService是Service的子类。它使用工作线程逐一处理所有启动请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android创建服务之started service详细介绍

    创建started service 应用组件(例如Activity)调用startService()来启动一个Service,将需要的参数通过Intent传给Service,Service将会在onStartCommand函数中获得Intent. 有两种方式可以创建started service,一种是扩展Service类,另外一种是扩展IntentService类 扩展Service       这是所有服务的基类.扩展这个类的时候,特别重要的一点是,需要创建一个新的线程来做服务任务,因为se

  • Android中Service服务详解(二)

    本文详细分析了Android中Service服务.分享给大家供大家参考,具体如下: 在前面文章<Android中Service服务详解(一)>中,我们介绍了服务的启动和停止,是调用Context的startService和stopService方法.还有另外一种启动方式和停止方式,即绑定服务和解绑服务,这种方式使服务与启动服务的活动之间的关系更为紧密,可以在活动中告诉服务去做什么事情. 为了说明这种情况,做如下工作: 1.修改Service服务类MyService package com.ex

  • Android Service 服务不被杀死的妙招

    Service是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互. Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理. 从Android官方文档中,我们知道onStartCommand有4种int返回值,首先简单地讲讲int返回值的作用.

  • android开发教程之开机启动服务service示例

    个例子实现的功能是:1,安装程序后看的一个Activity程序界面,里面有个按钮,点击按钮就会启动一个Service服务,此时在设置程序管理里面会看的有个Activity和一个Service服务运行2,如果手机关机重启,会触发你的程序里面的Service服务,当然,手机启动后是看不到你的程序界面.好比手机里面自带的闹钟功能,手机重启看不到闹钟设置界面只是启动服务,时间到了,闹钟就好响铃提醒. 程序代码是: 首先要有一个用于开机启动的Activity,给你们的按钮设置OnClickListener

  • Android中Service服务详解(一)

    本文详细分析了Android中Service服务.分享给大家供大家参考,具体如下: 一.Service简介 Service是Android中实现程序后台运行的解决方案,适用于去执行那些不需要和用户交互而且还要求长期运行的任务.Service是android 系统中的四大组件之一(Activity.Service.BroadcastReceiver.ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互. Service并不是运行

  • Android中Service(后台服务)详解

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

  • Android四大组件之Service(服务)实例详解

    本文实例讲述了Android四大组件之服务用法.分享给大家供大家参考,具体如下: 很多情况下,一些与用户很少需要产生交互的应用程序,我们一般让它们在后台运行就行了,而且在它们运行期间我们仍然能运行其他的应用. 为了处理这种后台进程,Android引入了Service的概念.Service在Android中是一种长生命周期的组件,它不实现任何用户界面. 基本概念 Ÿ   Service是一种在后台运行,没有界面的组件,由其他组件调用开始. Ÿ   创建Service,定义类继承Service,An

  • Android Service服务详细介绍及使用总结

    Android Service服务详解 一.Service简介 Service是android 系统中的四大组件之一(Activity.Service.BroadcastReceiver. ContentProvider),它跟Activity的级别差不多,但不能页面显示只能后台运行,并且可以和其他组件进行交互.service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变

  • Android Service服务不被停止详解及实现

    Android Service服务一直运行: 最近有个项目需求是后台一直运行Service,但是一般都是可以手动停止的,这里就提供一个方法让Android Service服务一直运行,大家看下. 1.设置->应用->运行中->停止->杀死service 这样可以在service的onDestroy()方法中重启service public void onDestroy() { Intent service = new Intent(this, MyService.class); s

  • Anroid四大组件service之本地服务的示例代码

    服务是Android四大组件之一,与Activity一样,代表可执行程序.但Service不像Activity有可操作的用户界面,它是一直在后台运行.用通俗易懂点的话来说: 如果某个应用要在运行时向用户呈现可操作的信息就应该选择Activity,如果不是就选择Service. Service的生命周期如下: Service只会被创建一次,也只会被销毁一次.那么,如何创建本地服务呢? 实现代码如下: package temp.com.androidserivce; import android.a

  • Spring Boot 实现Restful webservice服务端示例代码

    1.Spring Boot configurations application.yml spring: profiles: active: dev mvc: favicon: enabled: false datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/wit_neptune?createDatabaseIfNotExist=true&useUnicode=true&

  • Springboot整合mqtt服务的示例代码

    首先在pom文件里引入mqtt的依赖配置 <!--mqtt--> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.4</version> </dependency> 其次在springboot 的配置yml文件,配

  • vue组件中使用iframe元素的示例代码

    本文介绍了vue组件中使用iframe元素的示例代码,分享给大家,具体如下: 需要在本页面中展示vue组件中的超链接,地址栏不改变的方法: <template> <div class="accept-container"> <div class="go-back" v-show="goBackState" @click="goBack">GoBack</div> <ul&g

  • Golang实现web文件共享服务的示例代码

    本文主要介绍了Golang实现web文件共享服务的示例代码,分享给大家,具体如下: 很简单,只需要两行代码. http.Handle("/", http.FileServer(http.Dir("./"))) //把当前文件目录作为共享目录 http.ListenAndServe(":8080", nil) 这时候,通过浏览器打开 http://ip 地址:8080 就可以了. 也许这样就完了,但是我为了方便非程序员用户使用,还需要程序自动获取本

  • Java基于LoadingCache实现本地缓存的示例代码

    目录 一. 添加 maven 依赖 二.CacheBuilder 方法说明 三.创建 CacheLoader 四.工具类 五.guava Cache数据移除 一. 添加 maven 依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>27.1-jre</version> </depend

  • React实现锚点跳转组件附带吸顶效果的示例代码

    React实现锚点跳转组件附带吸顶效果 import React, { useRef, useState, useEffect } from 'react'; import styles from './index.less'; import classnames from 'classnames'; function AnchorTabber(props) { const root = useRef(null); const header = useRef(null); const { att

  • JQuery以JSON方式提交数据到服务端示例代码

    JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多.以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式.地址.数据类型,以及回调方法等.下面的代码演示了如何将客户端表单数据封装成JSON格式,然后通过JQuery的Ajax请求将数据发送到服务端,并最终将数据存储到数据库中.服务端定义为一个.ashx文件,事实上你可以将服务端定义为任何能接收并处理客户端数据的类型,如Web Service,ASP.NET Page,Handler等. 首

  • vue.js自定义组件实现v-model双向数据绑定的示例代码

    我们都清楚v-model其实就是vue的一个语法糖,用于在表单控件或者组件上创建双向绑定. //表单控件上使用v-model <template> <input type="text" v-model="name" /> <input type="checkbox" v-model="checked"/> <!--上面的input和下面的input实现的效果是一样的--> <

  • Android中Service和Activity相互通信示例代码

    前言 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,本文就给大家详细介绍了关于Android中Service和Activity相互通信的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Activity向Service通信 第一种方式:通过MyBinder方式调用Service方法 MainActivity public class Ma

随机推荐