activity和service的交互
2015-09-20 14:09
405 查看
在Android开发过程中,我们可能需要这样的需求:
使用activity开启一个service,而service中开启了一个线程,线程中有一个变量,而activity想获取service中的这个变量
解决方式:在activity中设置一个receiver,用来获取service中线程的变量,详细代码如下:
MainActivity核心代码:
public class MainActivity extends Activity {
private Button start,stop,bind,unbind;//定义四个按钮,分别为启动service的两种方式
private ServiceConnection sConnection;//用来bindservice
private TextView textView;
MyReceiver1 myReceiver;//自定义的receiver
ServiceDemo核心代码为:
public class ServiceDemo extends Service {
private final String TAG=”log”;
private int count=0;//这个使我们需要获取的数据
private boolean isClosed=false;//判断service时候开启或关闭
manifest文件的代码:
使用activity开启一个service,而service中开启了一个线程,线程中有一个变量,而activity想获取service中的这个变量
解决方式:在activity中设置一个receiver,用来获取service中线程的变量,详细代码如下:
MainActivity核心代码:
public class MainActivity extends Activity {
private Button start,stop,bind,unbind;//定义四个按钮,分别为启动service的两种方式
private ServiceConnection sConnection;//用来bindservice
private TextView textView;
MyReceiver1 myReceiver;//自定义的receiver
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView=(TextView)findViewById(R.id.textView2); //向系统注册receiver myReceiver=new MyReceiver1(); IntentFilter filter=new IntentFilter(); filter.addAction("com.example.servicedemo.MyReceiver"); MainActivity.this.registerReceiver(myReceiver, filter); start=(Button)findViewById(R.id.button1); stop=(Button)findViewById(R.id.button2); bind=(Button)findViewById(R.id.button3); unbind=(Button)findViewById(R.id.button4); //用于service绑定activity sConnection=new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { Log.i("log", "onServiceDisconnected调用成功..."); } @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i("log", "onServiceConnected调用成功..."); } }; } //自定义的MyReceiver,具体实现 public class MyReceiver1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle=intent.getExtras(); int count=bundle.getInt("count"); Toast.makeText(MainActivity.this, count+"", Toast.LENGTH_SHORT).show(); } } public void click(View v) { Intent intent=new Intent(MainActivity.this,ServiceDemo.class); switch (v.getId()) { case R.id.button1: //启动service startService(intent); Toast.makeText(MainActivity.this, "利用startService启动了service", Toast.LENGTH_SHORT).show(); break; case R.id.button2: stopService(intent); Toast.makeText(MainActivity.this, "利用stopService", Toast.LENGTH_SHORT).show(); break; case R.id.button3: bindService(intent, sConnection, BIND_AUTO_CREATE); Toast.makeText(MainActivity.this, "利用BindService启动了service", Toast.LENGTH_SHORT).show(); break; case R.id.button4: unbindService(sConnection); Toast.makeText(MainActivity.this, "利用unbindService", Toast.LENGTH_SHORT).show(); break; } }
ServiceDemo核心代码为:
public class ServiceDemo extends Service {
private final String TAG=”log”;
private int count=0;//这个使我们需要获取的数据
private boolean isClosed=false;//判断service时候开启或关闭
@Override public IBinder onBind(Intent intent) { Log.i(TAG, "调用了onBind()方法..."); return null; } @Override public void onCreate() { super.onCreate(); Log.i(TAG, "调用了onCreate()方法..."); new Thread(new Runnable() { @Override public void run() { while(!isClosed) { try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } count++; Intent intent=new Intent();; intent.putExtra("count", count); intent.setAction("com.example.servicedemo.MyReceiver"); sendBroadcast(intent); } } }).start(); }
manifest文件的代码:
相关文章推荐
- LeetCode -- Maximum Depth of Binary Tree
- 第11章 Windows线程池(3)_私有的线程池
- [leetcode]Move zeros 慢方法和快方法
- android error while loading shared libraries: libstdc++.so.6
- 为jframe窗口设置背景图片
- 联想输入插件--AutoComplete
- PHP5 各版本维护时间
- 【NOIP2012】火柴排队 逆序对数
- WatchOS 2 app 与 Iphone app 数据交互(三1)覆盖式后台传输
- Matlab与C++混合编程(依赖OpenCV)
- 单例模式
- 主机电源所有接口详解
- ReactJS 知识简介
- 使用ATL创建简单ActiveX控件(三) —— 添加连接点
- hdu 4964 Emmet()模拟
- 数据库范式——通俗易懂
- iOS开发 - NSURLSession简单介绍及POST、GET请求案例
- 超炫Android-ConvenientBanner轻松实现广告头效果
- 黑马程序员-------NSString 学习
- iOS Navigation+TabBar简单框架