淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(四)
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详解(四)的更多相关文章
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(六)
Service和Thread的关系 不少初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread? 答案是Service和T ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(五)
我们现在对上一节中的DEMO进行改进,在服务中开启线程来执行. package com.example.service; import android.app.Service; import andr ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(三)
主题:Service与Activity交互通信 问题的引出:现在有个需求,如果我们有一个下载任务,下载时间耗时比较长,并且当下载完毕后,需要更新UI的内容,这时,service中的bindServic ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(二)
DEMO1:当我们点击启动服务时和点击停止服务的时候,观察服务的运行状态,布局由于简单,只是两个普通的Button按钮,在此我只上截图. java代码部分 第一步:我们需要实现一个服务类,继承自ser ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(一)
public abstract class Service; [API文档关于Service类的介绍] A Service is an application component representi ...
- 淘宝(阿里百川)手机客户端开发日记第七篇 Service,Handler和Thread
现在我们已经已经知道android有Service,Handler和Thread这些内容了,但是我想应该还有很多人对此并不是很清楚他们之间的区别! (1)Service 是运行在后端的程序,不与UI直 ...
- 淘宝(阿里百川)手机客户端开发日记第十一篇 JSP+Servlet
由于本人从事.net开发已有多年经验,今天由于工作需要,我只能学习下JSP+Servlet,至于java web提供了更好的开发框架MVC,现在由于时间关系,我只好用JSP+Servlet来搭建服务器 ...
- 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解
我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...
- 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)
个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...
随机推荐
- linux用户管理命令
关键字 useradd passwd who w uptime 1.useradd添加用户命令 useradd 用户名 passwd 用户名 (设置密码) 2.userdel 删除用户 userdel ...
- Spring security 学习 (自助者,天助之!)
自己努力,何必要强颜欢笑的求助别人呢? 手心向下不求人! Spring security学习有进展哦: 哈哈! 1.页面都是动态生产的吧! 2.设置权限: a:pom.xml配置jar包 b:cr ...
- nginx 的中文配置详细解释
文章转自:http://www.ha97.com/5194.html 更详细的模块参数请参考:http://wiki.nginx.org/Main #定义Nginx运行的用户和用户组 user www ...
- Jetty+json-lib库抛异常的问题解决过程(java.lang.NoClassDefFoundError: net/sf/json/JSONObject)
一.之前抛异常是将json库改成了fastjson解决的,参见: http://www.cnblogs.com/gossip/p/5369670.html 异常信息: 二.解决步骤 ...
- Java 线程并发策略
1 什么是并发问题. 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题. 2 java中synchronized的用法 用法1 public class Test{ public ...
- PLSQL中配置Oracle方法
在服务器上,用PL/SQL连接Oracle数据库时,出现了一个问题,提示: Initialization error Could not load "F:\oracle\bin\oci.dl ...
- 重启猫(modem)的方法
重启猫(modem)的方法 家里上网还是古老的"猫+路由器"模式,换路由器后就要reset猫,其步骤为: 断开猫电源 用针头或笔尖按住reset小孔,持续30秒 针抵住小孔的同时连 ...
- poj 1006 中国剩余定理解同余方程
其实画个图就明白了, 该问题就是求同余方程组的解: n+d≡p (mod 23) n+d≡e (mod 28) n+d≡i (mod 33) #include "iostream" ...
- hdu 1575 矩阵快速幂模板
#include "iostream" #include "vector" #include "cstring" using namespa ...
- JSP 九个隐含JSP对象
输入输出对象:request.response.out. 作用域通信对象:session.application.pageContext servlet对象:page.config 错误对象:exce ...