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

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

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

 1 package com.example.service;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7 import android.util.Log;
 8 import android.widget.Button;
 9
10 public class MyService extends Service {
11
12     public static final String TAG = "MYSERVICE";
13
14     @Override
15     public void onCreate() {
16         Log.i(TAG, "MyService-->onCreate");
17         super.onCreate();
18     }
19
20     @Override
21     public void onDestroy() {
22         Log.i(TAG, "MyService-->onDestroy");
23         super.onDestroy();
24     }
25
26     @Override
27     public int onStartCommand(Intent intent, int flags, int startId) {
28         Log.i(TAG, "MyService-->onStartCommand");
29         return super.onStartCommand(intent, flags, startId);
30     }
31     private MyBinder binder = new MyBinder();
32
33     public class MyBinder extends Binder implements ICalculator
34     {
35          public MyService getService()
36          {
37              return MyService.this;
38          }
39
40          @Override
41          public int add(int x, int y) {
42                 try {
43                     Thread.sleep(10000);
44                 } catch (InterruptedException e) {
45                     // TODO Auto-generated catch block
46                     e.printStackTrace();
47                 }
48                 return x + y;
49          }
50     }
51
52     @Override
53     public IBinder onBind(Intent arg0) {
54
55         return binder;
56     }
57
58
59
60 }

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

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,否则将追究版权责任!

时间: 2024-10-10 17:12:33

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

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

Service和Thread的关系 不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread? 答案是Service和Thread之间没有任何关系! Service 是在后台运行的,但是它运行在主线程中,Service无法直接和UI进行交互,我们只有通过接口回调和广播机制(下一节将介绍广播机制)来实现对UI的操作: Thread 是用于开启一个子线程,执行一些耗时操作不会阻塞主线程的运行: 举个例子: 某些应用程序可

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

我们现在对上一节中的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

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

public abstract class Service; [API文档关于Service类的介绍] A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other appli

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

DEMO1:当我们点击启动服务时和点击停止服务的时候,观察服务的运行状态,布局由于简单,只是两个普通的Button按钮,在此我只上截图. java代码部分 第一步:我们需要实现一个服务类,继承自service,并实现其中的一些方法:这里我在每个方法里,打印出调用方法的名称. package com.example.service; import android.app.Service; import android.content.Intent; import android.os.IBinde

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

主题:Service与Activity交互通信 问题的引出:现在有个需求,如果我们有一个下载任务,下载时间耗时比较长,并且当下载完毕后,需要更新UI的内容,这时,service中的bindService就派上用场了.读者可能到此头脑里有些疑问,Thread和Service都是在后台运行啊,为什么不用Thread呢?大家别急啊,这个我将在下节详细帮你分析下Service后台运行和Thread的运行之间的不同. 我们需要知道,service在运行时,它是和UI无关联的,它是在非UI线程里运行的.想让

淘宝(阿里百川)手机客户端开发日记第六篇 广播机制详解(一)

public abstract class BroadcastReceiver; Base class for code that will receive intents sent by sendBroadcast(). If you don't need to send broadcasts across applications, consider using this class with LocalBroadcastManager instead of the more general

淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍

阿里百川的官方网址:http://baichuan.taobao.com/ ,具体详情,自己点击去查看. 提前声明:本人和淘宝一点关系没有,最近是自己有个项目,需要使用它们的平台,来开发android,IOS的客户端产品,所以将平时在实践过程中,很多重要的心得记下,方便自己后期遇到问题,随时查阅:同时,也能帮助很多爱好编程者提供一些资料,毫无其它目的,谢谢! 这节课,将向你介绍下它的大致内容:刚开始接触阿里百川,很多人会遇到各种各样的,貌似千奇百怪的问题,我将以简明的方式,让大家快速搭配环境,来

淘宝(阿里百川)手机客户端开发日记第十篇 什么是淘宝客(七)

在淘宝客中,有淘宝联盟.卖家.淘客以及买家四个角色.他们每个都是不可缺失的一环,如图所示. (1)淘宝联盟(http://www.alimama.com/):一个推广平台,帮助卖家推广产品:帮助淘客赚取利润,每笔推广的交易抽取相应的服务费用. (2)卖家:佣金支出者,他们提供自己需要推广的商品到淘宝联盟,并设置每卖出一个产品愿意支付的佣金. (3)淘宝客:佣金赚取者,他们在淘宝联盟中找到卖家发布的产品,并且推广出去,当有买家通过自己的推广链接成交后,那么就能够赚到卖家所提供的佣金(其中一部分需要

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

由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器端开发.主要是提供了客户端的广告位设置,引导页的设置,以及商品分类的设置,和商品的详情,最后是购物车(客户端). 首先,我们先认识下Java Web开发项目基本的结构 我们写Servlet,和我们.net开发里的服务器端开发类似.服务端的开发主要是和数据库,业务逻辑代码有很大关系.然后将数据投递给前