andriod的Service基础demo

学习目标

service的配置,service服务生命周期,IntentService功能和用法

Service和activity比较相似,比如他们也都是context派生出来的,可以调用context中定义的getResources(),getContentResolver()等方法。当然,service也有自己的生命周期,方法如下:

IBinder onBind(Intent intent):service必须重写的方法,该方法返回一个IBinder对象,应用程序可通过该对象与service组件通信。

void onCreate():当该Service第一次被创建后将立即回调该方法

void onDestroy():当service被关闭之前立即回调该方法

void onStartCommand(Intent intent,int flag,int startId):之前是onStart方法,现已经过期不可用,当客户端调用startService(Intent)启动该service时,都会回调该方法。

boolean onUnbind(Intent intent):当该service上绑定的所有客户端都断开连接时将回调该方法
demo代码如下:

新建项目:

1,layout布局

<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main_bt1"
        android:text="startService方式启动" />
     <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main_bt2"
        android:text="stopService方式关闭" />
     
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main_bt3"
        android:text="bindService方式关闭" />
      <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/main_bt4"
        android:text="unbindService方式关闭" />

</LinearLayout>

2,activity活动java类代码

package com.example.android_lession8_1;

import com.example.service.MyService;
import com.example.service.MyService.Mybind;

import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

//    private String app_name=MainActivity.this.getResources().getString(R.string.app_name);
//    private String sd_path=Environment.getExternalStorageDirectory().getPath();
    
    private Button bt1,bt2,bt3,bt4;
    
    private ServiceConnection connection;
    private int a=1;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1=(Button) findViewById(R.id.main_bt1);
        bt2=(Button) findViewById(R.id.main_bt2);    
        bt3=(Button) findViewById(R.id.main_bt3);    
        bt4=(Button) findViewById(R.id.main_bt4);    
        
        
        
        connection=new ServiceConnection() {
            
            @Override
            public void onServiceDisconnected(ComponentName name) {
                // TODO Auto-generated method stub
                Log.d("zyy", "与服务断开连接");
            }
            
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Log.d("zyy", "与服务产生连接");
                Mybind my=(Mybind) service;
                int a=my.a;
                Log.d("zyy", "service处理完后的a的值是"+a+" "+name.toString());
            }
        };
        
        //启动service   采用startservice方式
        bt1.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //指明启动的服务
                Intent intent=new Intent();       
                intent.setAction("com.zyy.myservice");
                
                //启动服务
                MainActivity.this.startService(intent);
                
                
            }
        });
        
        //关闭service
        bt2.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //指明关闭的服务
                Intent intent=new Intent();       
                intent.setAction("com.zyy.myservice");
                
                //关闭服务
                MainActivity.this.stopService(intent);
                
            }
        });
        
        //bind方式启动服务
        bt3.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //指明打开的服务
                Intent intent=new Intent();       
                
                intent.setAction("com.zyy.myservice");
                intent.putExtra("myparam", a);
                
                //启动服务
               MainActivity.this.bindService(intent, connection,Service.BIND_AUTO_CREATE);
                
            }
        });
        
        
        //unbind关闭service
        bt4.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //指明关闭的服务
                Intent intent=new Intent();       
                intent.setAction("com.zyy.myservice");
                
                //关闭服务
                MainActivity.this.unbindService(connection);
                
            }
        });
        
        
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
3,Service服务代码

package com.example.service;

import com.example.android_lession8_1.R;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service{

//context派生而出,故而res资源和sd卡都可以访问
    
    public class Mybind extends Binder{
    public    int a;
        public Mybind(int a){        
            this.a=a;
        }
    }
    
    
    
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Log.d("zyy", "调用了服务的onBind 方法"+getResources().getString(R.string.app_name));
        int a=intent.getIntExtra("myparam", 0);
        if(a!=0){
            a++;
        }
        
        
        return new Mybind(a);
    }

@Override
    public void onCreate() {
        super.onCreate();
        
        Log.d("zyy", "调用了服务的oncreate 方法");
        
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Log.d("zyy", "调用了服务的onStartCommand 方法");
        
        return super.onStartCommand(intent, flags, startId);
    }
    
     @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
         Log.d("zyy", "调用了服务的onUnbind 方法");
        return super.onUnbind(intent);
    }
    
     
     @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        
        super.onDestroy();
         Log.d("zyy", "调用了服务的onDestroy 方法");
     }
     
     
     @Override
    public void onRebind(Intent intent) {
        // TODO Auto-generated method stub
        super.onRebind(intent);
         Log.d("zyy", "调用了服务的onRebind 方法");
    }
     
    
}
4,清单文件配置代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android_lession8_1"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.android_lession8_1.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <service
            android:name="com.example.service.MyService"
            >
            <intent-filter >
               <action android:name="com.zyy.myservice"/>      
            </intent-filter>
        </service>
        
        
        
        
    </application>

</manifest>

时间: 2024-10-20 01:54:06

andriod的Service基础demo的相关文章

Android 回顾Service之Service基础使用

这两天在回顾Android Service方面的知识,趁着记忆没有消退之前,来总结一下.本文主要讲解Service的基本概念与使用.跨进程调用Service.系统常见Service的使用.所以本文的难度微乎其微,仅适用于想回顾Service知识点的同学,或者还不怎么了解Service的同学,至于Service源码之类的东东,等老夫分析研究之后再来分享. 一.Service基础 我相信只要接触过Android开发的人,都或多或少的了解过Service.Service是什么呢?Service是And

Android笔记之 Web Service 基础

一.Web Service是什么? 就是网络服务,根据W3C的定义,WebServices(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包含.自描述和模块化的应用程序,它可以在网络中被描述.发布和调用,可以将它看作是基于网络的.分布式的模块化组件.  Web Services是建立在通用协议的基础之上的,包括HTTP.SOAP.UDDI.WSDL等.其中Web Service三要素就是SOAP.WSDL和UDDI. SOAP用来描述传递信息的格式, WSDL用来描述如何访

Web Service学习-CXF开发Web Service实例demo(一)

Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样调用问题.比如.有一个C语言写的程序.它想去调用java语言写的某个方法. 集中解决:1,远程调用 2.跨平台调用 3,跨语言调用 实际应用: 1.同一个公司的新,旧系统的整合.Linux上的java应用,去调用windows平台的C应用 2,不同公司的业务整合.业务整合就带来不同公司的系统整合.不

Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo

http://blog.csdn.net/chdhust/article/details/42645313 Nginx + FastCGI 程序(C/C++)搭建高性能web service的Demo 1.介绍 Nginx - 高性能web server,这个不用多说了,大家都知道. FastCGI程序 - 常驻型CGI程序,它是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能. Nginx要调用FastCGI程序,需要用到FastCGI进程

Andriod Service 基础知识

Service  分为两类  A started service 被开启的service通过其他组件调用 startService()被创建. 这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它. 当service被停止时,系统会销毁它. A bound service 被绑定的service是当其他组件(一个客户)调用bindService()来创建的. 客户可以通过一个IBinder接口和service进行通信. 客户

Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信

Service的基本概念 为什么要有Service Service的基本用法 电话窃听器的小案例 Service和Activity通信 Service和Thread的关系 向光明而行! Service的基本概念 Service是Android的四大组件之一,在每一个应用程序中都扮演者非常重要的角色. 它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候,我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. 既然都是被用于处理耗时的操作,那么我们什么

【入门篇】Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布

http://blog.csdn.net/allenlinrui/article/details/19419721 1.介绍 Nginx - 高性能web server,这个不用多说了,大家都知道. FastCGI程序 - 常驻型CGI程序,它是语言无关的.可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能. Nginx要调用FastCGI程序,需要用到FastCGI进程管理程序(因为nginx不能直接执行外部的cgi程序,我们可使用lighttpd中的s

node-webkit 环境搭建与基础demo

首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中建立我们的项目 添加app文件夹,并添加index.html <html> <head> <title>windowdemo</title> <metahttp-equiv="Content-Type"content="tex

broadcastReceiver广播基础demo介绍

andriod的BroadcastReceiver介绍 编辑删除 作者:一座城一颗努力的心2016-07-12 00:24分类:默认分类标签: 科技 IT软件 broadcastReceiver开发步骤: 1  创建需要启动的BroadcastReceiver的Intent 2  调用context中的sendBroadcast或者sendOrderedBroadcast()方法来启动指定的广播接受者(BroadcastReceiver) 需要注意的是:当应用程序发出一个boradcastRec