Service 绑定方式启动,生命周期。绑定方式读取服务器数据

package com.example.lenovo.service;

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 {
    public MyService() {
        Log.e("TAG","MyService被创建");
    }

    @Override
    public void onCreate() {
        Log.e("TAG","onCreate被调用");
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        Log.e("TAG","onDestroy被调用");
        super.onDestroy();
    }

    @Override
    public void onRebind(Intent intent) {
        Log.e("TAG","onRebind被调用");
        super.onRebind(intent);
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.e("TAG","onUnbind被调用");
        return super.onUnbind(intent);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String string = intent.getStringExtra("test");
        Log.e("TAG","onStartCommand被调用,并收到数据="+string);
        return super.onStartCommand(intent, flags, startId);
    }

    //代理对象
    public class MyBinder extends Binder
    {
        //定义数据交换的方法
        public int getTest()
        {
            return 123;
        }

    }

    int anInt;
    //回调方法
    //绑定
    @Override
    public IBinder onBind(Intent intent) {
        Log.e("TAG","onBind被调用");
       //启动业务逻辑
        new Thread()
        {
            @Override
            public void run() {
                for(int i = 0;i<100;i++)
                {
                    anInt++;
                    try {
                        Thread.sleep(1000);
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
        //代理对象
        return new MyBinder();
    }
}

MyService

 ServiceConnection sc;
    MyService.MyBinder myb;
    //绑定
    public void bt_3(View v)
    {
        //以绑定方式启动
        //准备Intent:显式意图
        Intent intent = new Intent(this,MyService.class);
        if (sc==null) {
            sc = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {

                    //代理对象
                    myb = (MyService.MyBinder) service;
                    Toast.makeText(MainActivity.this, "绑定启动完成,接收返回的对象" + myb, Toast.LENGTH_SHORT).show();
                }

                //异常状态时触发
                @Override
                public void onServiceDisconnected(ComponentName name) {

                    Toast.makeText(MainActivity.this, "服务连接中断", Toast.LENGTH_SHORT).show();
                }
            };
        }
        //三个参数
        //1-意图
        //2-服务连接的实现类
        //3-启动方式,一般用Context.BIND_AUTO_CREATE
        bindService(intent, sc, Context.BIND_AUTO_CREATE);
    }
    //解除绑定
    public void bt_4(View v)
    {

        if (sc!=null) {
            unbindService(sc);
            sc=null;
        }
        else
        {
            Toast.makeText(MainActivity.this, "请先绑定服务", Toast.LENGTH_SHORT).show();
        }
    }
    //读取
    public void bt_5(View v)
    {
        //读取服务的运行数据
        //用代理对象
        Toast.makeText(MainActivity.this, "读到的服务数据="+myb.getTest(), Toast.LENGTH_SHORT).show();
    }

MainActivity.java

时间: 2024-08-12 12:17:48

Service 绑定方式启动,生命周期。绑定方式读取服务器数据的相关文章

Openfire3.8.2在eclipse中Debug方式启动最简单的方式

一.前言 最近打算研究一下Openfire,于是打算最好能够以Debug方式启动Openfire的Server,到网上一搜,还果真早到官网的一篇文章来: http://community.igniterealtime.org/docs/DOC-1020 网上很多朋友按照这个教程去搭建,有的说文章有瑕疵的地方,姑且不说瑕疵,就这很长的步骤令人厌恶.本来我想按照这个教程去做,但是,单使用 Eclpse SVN下载令人崩溃,一直显示进度为0%,后来换了TortoiseSVN好一些,下载了两次,每次都花

服务【启动方式】生命周期 通讯

基本概念 Service通常总是称之为"后台服务",其中"后台"一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件: 1.并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的,如前台Service就是与Notification界面结合使用的) 2.具有较长时间的运行特性 服务的两(三)种启动方式 1.startService方式启动服务 最核心的一句话:当Client

Servlet的生命周期+实现方式

1.Servlet的生命周期:        (1)被创建:            默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法.                一个Servlet只会被创建一次.init()方法也只会被调用一次.                Servlet是单例的.而服务器时多线程的.可能存在线程安全问题.                  为了避免安全问题,在Servlet中尽量不要定义成员变量.即使定义了.也不要进行其他操作(只能查询).

JavaEE基础(01):Servlet实现方式,生命周期执行过程

本文源码:GitHub·点这里 || GitEE·点这里 一.Servlet简介 Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容.使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页. 二.实现方式 1.继承HttpServlet API简介 继承自 GenericServlet. 遵守 HTTP协议实现,以设计模式的角度看,HttpServlet担任抽象模板角色,模板方法:由ser

论Activity及启动模式,Fragment,Service的使用以及生命周期

Activity: 这是我总结出来的,介于Activity生命周期相对较多,我在Google官方的生命周期图上又加了几个常用的,便于大家理解 对于ACtivity,先说说启动模式(ps:复制党去死吧,这年头加一点自己的特色好吗): 1,默认模式,启动Activity的时候新建一个实例,然后推入栈中,生命周期从onCreate()开始(这是必须的) 2,singletop,顾名思义嘛,当Activity的实例在栈顶的时候,如果还要启动它,走onNewIntent(),应用实例:三条推送,点进去都是

Android 之Service的使用及生命周期

关于Android中的Service的使用,首先要明白Service的生命周期,开发Service的步骤与Activity的步骤很像,开发Service组件需要先开发一个Service的子类,然后在AndroidManifest.xml中配置该Service. 首先,先来说一下Service的生命周期: 正如Activity一样,Service也有自己的一套生命周期函数,在Android中,运行Service有两种方法: (1) 通过Context的startService()方法:通过该方法启

从源代码剖析Struts2中用户自定义配置转换器的两种方式——基于字段的配置转换器和基于类型的配置转换器(解决了实际系统中,因没有区分这两种工作方式的生命周期而引起的异常错误问题)

自定义类型转换器必须实现ongl.TypeConverter接口或对这个接口的某种具体实现做扩展 <<interface>>com.opensymphony.xwork2.conversion.TypeConverter à com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter à org.apache.struts2.util.StrutsTypeConverter 接口及类进行解析 TypeConverter(

Windows Azure Cloud Service (10) Role的生命周期

<Windows Azure Platform 系列文章目录> 在上一章内容中,我们提到了Windows Azure会依次调用角色(Role)实例的OnStart()方法和Run()方法. 在本节中我们会对Role的生存周期进行进一步的了解.首先,让我们走到幕后看看一个Role Instance是怎么被发布到虚拟机上并启动起来的. Role在虚拟机上部署和运行的过程 以下是角色实例(Role Instance)发布和启动的一个简要过程. Windows Azure在服务器池中选择一个有足够CP

18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用

?? 1 绑定服务(本地的方式),要做如下的案例: 操作步骤:"先点击绑定服务",再点击"调用服务里面的方法",然后查看服务的执行情况. 2编写Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" pack