android service和activity的通讯
我们须要用下面方式来启动service:
</pre><pre name="code" class="java"><span style="white-space:pre"> </span>Intent intent = new Intent();
intent.setClass(MainActivity.this, MyService.class);
<strong>bindService(intent,conn,BIND_AUTO_CREATE);</strong>
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = ((MyService.MyBinder)service).getService();
}
};
这时service会运行:onCreate和onBind
然后
我们去运行一些任务:
ImageView item_image = (ImageView)findViewById(R.id.item_image);
item_image.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
<strong>mService.setHandler(mHandler);
mService.startCheckIfUpgrade();</strong>
}
}); private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case GET_UPGRADE_INFORMATION_COMPLETE:
System.out.println("=======notify need upgrade");
AlertDialog dialog = getCustomDialog();
dialog.show();
default:
break;
}
}
};
Service的代码是:
public class MyService extends Service {
/** thread to execute background task*/
private Thread mThread = null;
/** flag indicates if the service has been stopped*/
private boolean mStopFlag = false;
private static final int GET_UPGRADE_INFORMATION_COMPLETE = 202;
/** Handler to get notify from thread*/
private Handler mHandler = null;
public void setHandler(Handler handler) {
this.mHandler = handler;
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("====service onUnbind");
return super.onUnbind(intent);
}
public class MyBinder extends Binder {
/**
* 获取当前Service的实例
*
* @return
*/
public MyService getService() {
return MyService.this;
}
}
public void startCheckIfUpgrade() {
if(mThread == null){
mThread = new UpgradeThread();
mThread.start();
}
}
@Override
public IBinder onBind(Intent arg0) {
System.out.println("====service onBind");
return new MyBinder();
}
/**
* @see android.app.Service#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
System.out.println("====service onCreate");
}
private class UpgradeThread extends Thread{
/**
* @see java.lang.Thread#run()
*/
@Override
public void run() {
super.run();
//在这里写去服务端查看是否须要升级的逻辑
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
boolean ret = true;
if(ret && !mStopFlag){
Message msg = new Message();
msg.what = GET_UPGRADE_INFORMATION_COMPLETE;
mHandler.sendMessage(msg);
}
}
}
/* (non-Javadoc)
* @see android.app.Service#onDestroy()
*/
@Override
public void onDestroy() {
System.out.println("====ondestroy");
mStopFlag = true;
try {
if (null != mThread && mThread.isAlive()) {
try
{
mThread.stop();
}
catch (Exception e)
{
}
}
mThread = null;
}
catch (Exception e) {
e.printStackTrace();
}
super.onDestroy();
System.gc();
}
}
当activity销毁后Service会运行:
onUnbind和onDestroy
这个说明这个service的生命周期和activity是一致的
android service和activity的通讯的更多相关文章
- Android Service 通知Activity更新界面的方法研究
Android Service 通知Activity更新界面的方法研究 Android的最重要的组件式service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. ...
- Android—Service与Activity的交互
service-Android的四大组件之一.人称"后台服务"指其本身的运行并不依赖于用户可视的UI界面 实际开发中我们经常需要service和activity之间可以相互传递数据 ...
- Android Service与Activity之间通信的几种方式
在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activ ...
- Android:Service通知Activity更新界面
Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. 1.首先Activity调用Service 这个是比较基础的,它有两种 ...
- Android Service与Activity之间通信
主要分为: 通过Binder对象 通过broadcast(广播)的形式 Activity调用bindService (Intent service, ServiceConnection conn, i ...
- Android Service与Activity的交互
Android中有时候需要在Service中改变Activity的UI,或者在Activity中修改Service中的数值.首先必须使用与Activity绑定的Service,有三种方式可以实现.第一 ...
- Service 启动Activity
1, 在BroadcastReceiver中启动Activity的问题 * * 如果在BroadcastReceiver的onReceive()方法中如下启动一个Activity * Inten ...
- Android开机启动Activity或者Service方法
本文出自 “Bill_Hoo专栏” 博客,请务必保留此出处http://billhoo.blog.51cto.com/2337751/761230 这段时间在做Android的基础开发,现在有一需求是 ...
- android Service Activity三种交互方式(付源码)
android SDK提供了Service,用于类似Linix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Rem ...
随机推荐
- Linux各个发行版本的介绍, 以及VirtualBox+CentOS的安装步骤
Linux和Unix系统有哪些主要的发行版本 Unix: (非开源传统商业操作系统) IBM AIX, HP HP-UX, Sun Solaris,等 各家硬件厂商的发行版本, 往往是和自家的硬件设备 ...
- hdu 4455 Substrings(找规律&DP)
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 测试linux和window下 jdk最大能使用多大内存
在命令行下用 java -XmxXXXXM -version 命令来进行测试,然后逐渐的增大XXXX的值,如果执行正常就表示指定的内存大小可用,否则会打印错误信息. 发现在linux先 最多用java ...
- BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊(动态树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2002 [题目大意] 给出一片森林,操作允许更改一个节点的父亲,查询一个节点的深度. [ ...
- oracle dataguard 角色切换
- oracle decode函数用法
DECODE函数是ORACLE PL/SQL是功能强大的函数之中的一个,眼下还仅仅有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一 ...
- word排版论文小结
毕业论文如何用WORD排版 本人折腾了一晚上看别人的百度经验,做个总结,方便后人看懂,其实特别简单 用WORD自动生成页码 第一种情况:从第一页或者从第二页开始设置页码 这种情况只要“插入-> ...
- Python 3 学习笔记2
教程链接:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 高级特性 切片 取一个l ...
- C++中引用
在C语言中&这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法.一.引用简介 引用就是某一变量(目标)的一个 ...
- UVa1585 Score
#include <stdio.h> int main(){ int T, O, score; char str[81], *p; scanf("%d" ...