我们现在对上一节中的DEMO进行改进,在服务中开启线程来执行。

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";

    private int data;

    @Override
    public void onCreate() {
        Log.i(TAG, "MyService-->onCreate");
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 执行具体的任务
                getData();
            }
        }).start();
        super.onCreate();
    }

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

    private MyBinder binder = new MyBinder();

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

        @Override
        public int getData() {

            return data;
        }

    }

    @Override
    public IBinder onBind(Intent intent) {

        return binder;
    }

     void getData()
     {
        try
        {
            //模拟耗时的任务
            Thread.sleep(10000);
            data = 100;
        }
        catch (InterruptedException e) {

            e.printStackTrace();
        }

     }

}
package com.example.service;

public interface ICalculator {
    int getData();
}
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.getData();
            Toast.makeText(this, String.valueOf(x), 1).show();
        }
    }

}

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

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

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

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

    DEMO1:在Activity里声明一个回调方法,当service完成任务后,调用这个回调方法. 首先,我们先继承service,来创建服务,代码如下: package com.example.ser ...

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

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

  9. 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接

    首先,我建立了一个包,里面存放了三个类文件,这三个文件是我从网络中找的,经过自己的整理.(我刚才查找想把这三个文件传上去,可能是自己对cnblogs的博客不太熟悉吧,没有找到,我只好粘贴代码了) 三个 ...

随机推荐

  1. 《android基于andFix的热修复方案》实战篇

    有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.eul ...

  2. 自己写了个H5版本的俄罗斯方块

    在实习公司做完项目后,实在无聊.就用H5写了几个游戏出来玩一下.从简单的做起,就搞了个经典的俄罗斯方块游戏. 先上效果: 上面的数字是得分,游戏没有考虑兼容性,只在chrome上测试过,不过大部分现代 ...

  3. [Windows 64] (搬运)价值¥ 6,499的软件Navicat Premium11.2.11 最新版及其注册机

    Navicat Premium可以连接6种数据库并开发> 转载于:http://www.52pojie.cn/thread-529020-1-1.html

  4. Handlebars的使用方法文档整理(Handlebars.js)

    Handlebars是一款很高效的模版引擎,提供语意化的模版语句,最大的兼容Mustache模版引擎, 提供最大的Mustache模版引擎兼容, 无需学习新语法即可使用; Handlebars.js和 ...

  5. JS模式:jq中简单的模式--》采摘自js设计(tomxu_version)

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  6. Spring控制Hibernate的缓存机制ehcache

    首先在spring.xml中进入bean <prop key="hibernate.cache.use_second_level_cache">true</pro ...

  7. Mysql常出现的问题

    1.mysql如何导入.txt文件?load data local infile 'D:\\data.txt' into table 表名 fields terminated by '\t';2.my ...

  8. 【BZOJ-2588】Count on a tree 主席树 + 倍增

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 3749  Solved: 873[ ...

  9. LABJS使用教程

    知道LABJS这个概念其实早于sea.js,但因为sea.js是中文,并且第一眼就喜欢上sea.js的CommonJS所以并没有深入了解过LABJS. 在使用sea.js的时候不可避免的碰到js文件依 ...

  10. resharper安装后,一不小心点错了(选择了object browser)

    打开Resharper,选择Options,然后选择Tools中的External Sources,你的情况是选择了Navigation to Object Brower这一项了,换成第一个Defau ...