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 ...
随机推荐
- BZOJ 3533: [Sdoi2014]向量集( 线段树 + 三分 )
答案一定是在凸壳上的(y>0上凸壳, y<0下凸壳). 线段树维护, 至多N次询问, 每次询问影响O(logN)数量级的线段树结点, 每个结点O(logN)暴力建凸壳, 然后O(logN) ...
- hdu 4162 Shape Number 最小表示法
题目链接 给一个字符串, 将它想象成一个环, 然后从环中任意一个位置断开, 求断开后字典序最小的那种情况. 直接上模板.. #include <iostream> #include < ...
- CSS3 旋转 太阳系
参考https://www.tadywalsh.com/web/cascading-solar-system/ 首先 旋转有两种方式 一种是使用 transform-origin 另一种是tran ...
- Azure 网站和通配符域
本文章由Azure 网站团队软件开发工程师Michael Candido 撰写 一些 Web 应用程序需要使用多个子域,在某些情况下还需要动态添加新的子域.例如,一个多租户 Web 应用程序可使 ...
- BZOJ 3498 PA2009 Cakes(三元环处理)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k ...
- HDU 5768 Lucky7(CRT+容斥原理)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5768 [题目大意] 求出一个区间内7的倍数中,对于每个ai取模不等于bi的数的个数. [题解] 首 ...
- perl笔记
更精确的空白字符串匹配 1.水平空白字符 Perl5.10之前,使用\s这种分类,不够精确,容易导致意料外的结果: Perl5.10中引入\h字符组,用来匹配任意水平空白字符(包括Unicode字符集 ...
- 取得phpcms网站下所有栏目的内容链接
今天做了一个小功能,就是取得公司网站的所有文章的内容地址,公司网站是用phpcms 做的,感觉还蛮简单的,记录下: <?php $conf['DB_USER'] = 'user'; $conf[ ...
- 物理DG主备库切换时遇到ORA-16139: media recovery required错误
在物理DG主备库切换时遇到ORA-16139: media recovery required错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRI ...
- linux下emacs安装
1.下载地址:http://ftp.gnu.org/pub/gnu/emacs/ 下载文件:emacs-24.2.tar.gz 步骤: 一.安装依赖文件: (先进入root:终端中输入 su -) ...