关于Service

Service说明:Service是android 系统中的四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的级别差不多,但不能自己运行只能后台运行,并且可以和其他组件进行交互。一般适合在后台运行。

Service启动流程

context.startService() 启动流程:

context.startService()  -> onCreate()  -> onStartCommand()  -> Service running  -> context.stopService()  -> onDestroy()  -> Service stop

启动Service方法->创建Service->启动运行(onStartCommand可多次运行,新版本不用onStart了)->关闭Service->销毁->Service停止

context.bindService()启动流程:

context.bindService()  -> onCreate()  -> onBind()  -> Service running  -> onUnbind()  -> onDestroy()  -> Service stop

Service生命周期

Service实例

activity_main.xml,两个按钮,一个启动TestService 一个点击后停止Service

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
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"
tools:context=".MainActivity" > <!-- button --> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="70dp"
android:layout_marginTop="116dp"
android:text="Start" /> <Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_marginLeft="38dp"
android:layout_toRightOf="@+id/button1"
android:text="Stop" /> </RelativeLayout>

MainActivity.java:

package com.example.test.com;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button; public class MainActivity extends Activity { private Button btn;
private Button btn2; private Intent intent; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
intent = new Intent(this, TestService.class); //start按钮
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
System.out.println("Click");
Bundle bundle = new Bundle();
bundle.putString("op", "Hello World2");
intent.putExtras(bundle);
startService(intent); //启动后端服务
} }); //stop按钮
btn2 = (Button) findViewById(R.id.button2);
btn2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if (intent != null) {
stopService(intent);
}
} });
} @Override
protected void onDestroy() {
//退出的时候停止Service
if (intent != null) {
stopService(intent);
}
} }

创建一个TestService.java:

package com.example.test.com;

import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder; public class TestService extends Service { Intent intent = new Intent(); @Override
public IBinder onBind(Intent intent) {
System.out.println("Service onBind");
return null;
} /**
* Service启动的时候创建一次
*/
@Override
public void onCreate() {
//只有在创建Service的时候 onCreate才会调用一次
System.out.println("Create TestService");
super.onCreate();
} /**
* 每次调用startService都会调用该函数
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//接收传递过来的参数
Bundle bundle = intent.getExtras();
System.out.println("Service onStartCommand VAL:" + bundle.getString("op"));
return super.onStartCommand(intent, flags, startId);
} /**
* 调用stopService的时候销毁Service
*/
@Override
public void onDestroy() {
//停止这个Service的时候会销毁
System.out.println("Service onDestroy");
super.onDestroy();
} }

AndroidManifest.xml 中注册Service:

        <service android:name=".TestService" >
</service>

效果:

安卓开发23:Service详细解读的更多相关文章

  1. Android安卓开发环境搭建详细教程

    安装目录:步骤1 安装JDK步骤2 安装 Android SDK ----http://www.androiddevtools.cn/ 步骤3 安装Tomcat步骤4 安装Ant步骤5 安装Eclip ...

  2. 安卓开发_startActivityForResult的详细用法

    一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据 百度了一下,发现startActivityForResult ...

  3. Android BLE蓝牙详细解读

    代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...

  4. C#编写WINNT服务,随便解决安卓开发遇到的5037被众多程序无节操占用的问题

    需求分析: 最近重新开始学习安卓开发,好久不用的ADT集成开发环境频繁遇到不能在仿真机和真机上调试的问题,也就是本人另一篇博文描述的ADB(Android Debug Bridge)监控的5037被金 ...

  5. 安卓开发开发规范手册V1.0

    安卓开发开发规范手册V1.0 之前发布过一份Web安全开发规范手册V1.0,看到收藏文章的读者挺多,发现整理这些文档还挺有意义. 最近周末抽了些时间把之前收集关于安卓安全开发的资料也整理了一下,整理出 ...

  6. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  7. 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

    这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...

  8. 安卓开发笔记——Fragment+ViewPager组件(高仿微信界面)

    什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再 ...

  9. 安卓开发笔记——深入Activity

    在上一篇文章<安卓开发笔记——重识Activity >中,我们了解了Activity生命周期的执行顺序和一些基本的数据保存操作,但如果只知道这些是对于我们的开发需求来说是远远不够的,今天我 ...

随机推荐

  1. android代码实现关机

      1.API没有开放,需要提升为syetem app级别! 2.android 模块编译,mm 命令 2.1.先进入顶层  source build/envsetup.sh 2.2.进入目录   m ...

  2. 【Web】java异常处理

    J2EE中一般对异常状况的处理都可以用两种情况对其进行相应处理. 1. 通常情况下,一般异常处理可以选择用throw.throws从底层一直往上面抛,直到抛到Action,让其将异常显示在页面上面进行 ...

  3. c++,派生类对象可以对基类赋值,基类对派生类不可以赋值

    派生类对象可以对基类对象赋值,赋值时属于派生类独有的部分就舍弃不用. #include <iostream> using namespace std; class DemoA { publ ...

  4. [Swust OJ 643]--行列式的计算(上三角行列式变换)

    题目链接:http://acm.swust.edu.cn/problem/643/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  5. cURL实现get、post请求

    1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性 ...

  6. PyQt中如何结合Qt设计师进行开发

    t设计师是Qt的所见即所得的界面设计工具,通过拖拉方式设计界面,但它并不能产生任何代码. Qt设计师使用.ui后缀的XML文件来存储界面内容.通过pyuic4命令可以编译成.py文件,.py文件的内容 ...

  7. Xcode6项目运行在真机上未铺满整个屏幕

    如图 解决见图: 再次运行:

  8. Nginx+tomcat集群环境搭建

    实验环境:windows xp sp3 Nginx版本:1.5.12: 下载地址:http://nginx.org/en/download.html Tomcat版本:6.0.39 下载地址:http ...

  9. 基于SOAP的xml网络交互心得

    感谢小二同学将遇到的问题分享给我们,再此给以掌声.如果看不懂下面文章的建议查找一下HTTP协议的文艺,对HTTP协议要有个概念. XML网络交互心得 目录 一.     xml解析 1.根路径下 2. ...

  10. debian支持ll命令

    debian支持ll命令 $ ll -bash: ll: command not found 没有ll这个命令.尽管也知道ll事实上 是ls -l 这个命令的别名,可是总感觉不是非常习惯.由于之前一直 ...