DEMO1:在Activity里声明一个回调方法,当service完成任务后,调用这个回调方法。

首先,我们先继承service,来创建服务,代码如下:

 package com.example.service;

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

 public class MyService extends Service {

     public static final String TAG = "MYSERVICE";

     @Override
     public void onCreate() {
         Log.i(TAG, "MyService-->onCreate");
         super.onCreate();
     }

     @Override
     public void onDestroy() {
         Log.i(TAG, "MyService-->onDestroy");
         super.onDestroy();
     }

     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
         Log.i(TAG, "MyService-->onStartCommand");
         return super.onStartCommand(intent, flags, startId);
     }
     private MyBinder binder = new MyBinder();

     public class MyBinder extends Binder implements ICalculator
     {
          public MyService getService()
          {
              return MyService.this;
          }

          @Override
          public int add(int x, int y) {
                 try {
                     Thread.sleep(10000);
                 } catch (InterruptedException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
                 }
                 return x + y;
          }
     }

     @Override
     public IBinder onBind(Intent arg0) {

         return binder;
     }

 }

其中,我定义了一个公共的接口

package com.example.service;

public interface ICalculator {
    int add(int x,int y);
}

主页面:MainActivity.java

package com.example.servicedemo;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import com.example.service.ICalculator;
import com.example.service.MyService;

/*
 * bindService(intent,conn,flag)
 * Service:onCreate()
 * Service:onBind()
 * Activity:onServiceConnected()
 */
public class MainActivity extends Activity implements OnClickListener {
    private Button btnStartSrv,btnStopSrv,btnBindSrv;

    private ICalculator ical;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStartSrv = (Button)findViewById(R.id.btnStartSrv);
        btnStopSrv = (Button)findViewById(R.id.btnStopSrv);
        btnBindSrv = (Button)findViewById(R.id.btnBindSrv);

        btnStartSrv.setOnClickListener(this);
        btnStopSrv.setOnClickListener(this);
        btnBindSrv.setOnClickListener(this);

        Intent intent=new Intent(MainActivity.this,MyService.class);
        bindService(intent, conn, BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        unbindService(conn);
        super.onDestroy();
    }

    @Override
    public void onClick(View view) {
        Intent service = new Intent(this, MyService.class);
        switch(view.getId())
        {
            case R.id.btnStartSrv:
            {

                startService(service);
                break;
            }
            case R.id.btnStopSrv:
            {
                stopService(service);
                break;
            }
            case R.id.btnBindSrv:
            {
                testSrv();
                Toast.makeText(this, "服务调用完了", 1).show();
                break;
            }
            default:
                break;
        }
    }

    ServiceConnection conn=new ServiceConnection(){

        @Override
        public void onServiceConnected(ComponentName arg0, IBinder service) {
            ical = (ICalculator) service;
        }

        @Override
        public void onServiceDisconnected(ComponentName arg0) {

        }
    };

    public void testSrv()
    {
        if(ical != null)
        {
            int x = ical.add(3, 5);
            Toast.makeText(this, String.valueOf(x), 1).show();
        }
    }

}

我故意在service里的方法,做了休眠10秒钟,当我们点击的BindSrv按钮时,过了10秒钟才弹出对话框,得到服务的运行结果。

所以,如果我在service中处理相对耗时的,就得在服务中另开一个线程。

转载请注明http://www.cnblogs.com/yushengbo,否则将追究版权责任!

淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(四)的更多相关文章

  1. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)

    Service和Thread的关系 不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread? 答案是Service和T ...

  2. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(五)

    我们现在对上一节中的DEMO进行改进,在服务中开启线程来执行. package com.example.service; import android.app.Service; import andr ...

  3. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(三)

    主题:Service与Activity交互通信 问题的引出:现在有个需求,如果我们有一个下载任务,下载时间耗时比较长,并且当下载完毕后,需要更新UI的内容,这时,service中的bindServic ...

  4. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(二)

    DEMO1:当我们点击启动服务时和点击停止服务的时候,观察服务的运行状态,布局由于简单,只是两个普通的Button按钮,在此我只上截图. java代码部分 第一步:我们需要实现一个服务类,继承自ser ...

  5. 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(一)

    public abstract class Service; [API文档关于Service类的介绍] A Service is an application component representi ...

  6. 淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread

    现在我们已经已经知道android有Service,Handler和Thread这些内容了,但是我想应该还有很多人对此并不是很清楚他们之间的区别! (1)Service 是运行在后端的程序,不与UI直 ...

  7. 淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet

    由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器 ...

  8. 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解

    我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...

  9. 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)

    个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...

随机推荐

  1. ajax请求模拟登录

    前台 @if (Session["username"] != null) { <div class="login"> <span style= ...

  2. linux用终端上传文件和文件家到远程的服务器

    文件上传:scp 本地文件地址 root@aifei8.net:/var/www/html/landrover 文件夹上传:1.先进入文件夹目录 2. 执行命令:scp -r . root@aifei ...

  3. MOTT的学习(一)

    MQTT的消息体 flag 此标志设置时,客户端或服务器尝试重新publish,PUBREL,subcribe或unsubscribe消息.这适用于消息, 其中的QoS的值大于零(0),并且需要确认. ...

  4. java中的字符串简介,字符串的优化以及如何高效率的使用字符串

    简介 String最为java中最重要的数据类型.字符串是软件开发中最重要的对象之一,通常,字符串对象在内存中总是占据着最大的空间块.所以,高效处理字符串,将提高系统的整个性能. 在java语言中,S ...

  5. 史上最全的javascript知识点总结,浅显易懂。

    来源于:http://blog.csdn.net/qiushi_1990/article/details/40260471 一,认识javascript1-1为什么学习JavaScript一).你知道 ...

  6. Java基础-内部类-为什么成员内部类可以无条件访问外部类

    在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面 ...

  7. SpringMVC实战

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  8. 用freemarker生产静态页面

    FreeMarker概述 * FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写     * Template + data model = output    ...

  9. 如何使用lessc编译.less文件

    LESS :一种动态样式语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox) ...

  10. HYSBZ 4197 寿司晚宴

    Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同 ...