AndroidのService与Activity的及时通信
来源:互联网 发布:vb picturebox名称 编辑:程序博客网 时间:2024/06/05 03:36
以前发表的博文一直都是没公布到博客园首页,因为怕高手笑话,但是想了想,如果一起讨论一起学习,不耻下问对自己无疑是更好,收获将更多。
希望各位看官不要喷我。
先看图片:
这里有四个按钮,第一个是绑定服务,绑定后,服务里的线程开始运行;第二个是解除绑定,解除绑定貌似只会回调Service的unBind()方法,所以还是要在服务的unBind()或destroy()方法里结束服务线程;第三个就是获取服务里的数据,并同步到Activity的标题;第三就是停止轮询调用获取服务线程的方法,这样就会停止轮询,你讲看到标题的字不会变化了,但是服务里的线程还在继续,因为还没有解除绑定服务。
这里有一个Activity和一个Service,里面各开一个线程,Activity线程用来刷新标题,Service线程用来改变数据,然后通过绑定服务获取服务的实例,然后就可以调用Service的方法了(笔者yy:要是可以在Activity里调用Service的方法多好啊,拉进了Activity和Service的距离,从此他们不再是交叉线而是螺线线!)
其中设计的知识还是挺多的,特别是多线程通信的内容,在Acitity里面我们需要用线程来更新界面,少不了要用到Handler和Message,接下来看代码,因为公司人都走了,就剩我还在这写博客,很想回家所以写的比较乱。
Activity的代码:
package com.bvin.demo.service; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import com.bvin.demo.service.BoundService.LocalBinder; public class MainActivity extends Activity { /** Called when the activity is first created. */ Intent intent; BoundService service; boolean isBound; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); Button btStart = new Button(this); btStart.setText("开始绑定"); Button btStop = new Button(this); btStop.setText("解除绑定"); Button btGet = new Button(this); btGet.setText("获取Service的内容"); Button btEnd = new Button(this); btEnd.setText("停止获取"); layout.addView(btStart, params); layout.addView(btStop, params); layout.addView(btGet, params); layout.addView(btEnd, params); setContentView(layout); intent = new Intent(this,BoundService.class); btStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub MainActivity.this.bindService(intent, conn, Context.BIND_AUTO_CREATE); } }); btStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub MainActivity.this.unbindService(conn); } }); btGet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub handler.post(runnable); } }); btEnd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub handler.removeCallbacks(runnable); } }); } private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); setTitle(msg.what+""); } }; Runnable runnable = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub Message msg = new Message(); msg.what = MainActivity.this.service.getInt(); handler.sendMessage(msg); handler.postDelayed(runnable, 2000); } }; @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); unbindService(conn); } private ServiceConnection conn = new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub LocalBinder binder = (LocalBinder)service; MainActivity.this.service = binder.getService(); isBound = true; } @Override public void onServiceDisconnected(ComponentName name) {//连接断开服务里的线程就会摧毁 // TODO Auto-generated method stub isBound = false; } }; }
Service的代码:
package com.bvin.demo.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.util.Log; public class BoundService extends Service{ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); } }; int x = 0; private Runnable runable = new Runnable(){ @Override public void run() { // TODO Auto-generated method stub Log.e("数值", x+""); x++; handler.postDelayed(runable, 2000); } }; public int getInt(){ return x; } private Binder binder = new LocalBinder(); @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub Log.e("BoundService", "onBind"); return binder; } public class LocalBinder extends Binder{ BoundService getService(){ return BoundService.this; } } @Override public void onCreate() {//首次创建才调用 // TODO Auto-generated method stub super.onCreate(); Log.e("BoundService", "onCreate"); handler.post(runable); } @Override public void onDestroy() {//final摧毁 // TODO Auto-generated method stub super.onDestroy(); Log.e("BoundService", "onDestroy"); //handler.removeCallbacks(runable); } @Override public void onStart(Intent intent, int startId) {//开始,可能调用多次 // TODO Auto-generated method stub super.onStart(intent, startId); Log.e("BoundService", "onStart"); } @Override public boolean onUnbind(Intent intent) {//接触绑定 // TODO Auto-generated method stub Log.e("BoundService", "onUnbind"); handler.removeCallbacks(runable); return super.onUnbind(intent); } @Override public void onRebind(Intent intent) {//重新绑定 // TODO Auto-generated method stub super.onRebind(intent); Log.e("BoundService", "onRebind"); } @Override public int onStartCommand(Intent intent, int flags, int startId) {//服务开始连接 // TODO Auto-generated method stub Log.e("BoundService", "onStartCommand"); return super.onStartCommand(intent, flags, startId); } }
记得在Manifest里注册上服务哦!
- AndroidのService与Activity的及时通信
- AndroidのService与Activity的及时通信
- Android的Service与Activity通信
- android activity与service之间的通信
- Android Activity与Service 的通信
- android activity与service通信
- Android Activity与Service通信
- Android service与Activity通信
- android activity 与service通信
- Android service 与 activity通信
- Android Service与Activity通信
- Android Activity与Service通信
- Android:Service的绑定和解绑定,Service与Activity通信
- Android组件---Service,AIDL,Service与Activity之间的通信
- android service 与activity通信--绑定service
- Activity 与 Service 的通信
- Android中Service与跨进程的Activity通信。
- Android中Activity与Service之间的通信
- 使用apache搭建代理服务器
- IE9在Win7下任务栏新特性简介
- 精妙SQL语句,基础,提升,技巧
- c语言学习笔记十一
- 关于调整互联网、电话订票预售期有关事项公告
- AndroidのService与Activity的及时通信
- [转]Windows Shell 编程 第四章
- .net XML文档操作
- Android:监听WIFI网络状态
- 初学Android,手势翻页效果(四十九)
- AutoPager的简单实现
- [转]Windows Shell 编程 第五章
- STL 容器和迭代器连载3_顺序容器初始化
- Flex学习资料大全