后台Service通过广播更新UI,Activity通过广播停止Service
2014-03-20 00:46
525 查看
运行如图:
点击按钮停止Service。
Activity如下:
Service如下:
点击按钮停止Service。
Activity如下:
package com.example.aandroidtest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends PublicActivity { private TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView) this.findViewById(R.id.textView1); //一个button,发送广播,停止service中启动的线程,以及停止service Button button = (Button) this.findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.excample.stopService"); sendBroadcast(intent); } }); //注册广播,接收service中启动的线程发送过来的信息,同时更新UI IntentFilter filter = new IntentFilter("com.example.updateUI"); this.registerReceiver(new MyBroadCaseReceiver(), filter); //启动service Intent intent = new Intent(this, MyService.class); this.startService(intent); } class MyBroadCaseReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent intent) { int i = intent.getIntExtra("data", 0); text.setText(String.valueOf(i)); } } }
Service如下:
package com.example.aandroidtest; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; public class MyService extends Service { boolean flag = true;//用于停止线程 @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { //注册receiver,接收Activity发送的广播,停止线程,停止service IntentFilter filter = new IntentFilter(); filter.addAction("com.excample.stopService"); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { flag = false; stopSelf();//在service中停止service } }, filter); //启动线程,每隔1s给广播个数据,给Activity接收到,并更新UI new Thread(new MyThread()).start(); return super.onStartCommand(intent, flags, startId); } class MyThread implements Runnable { int i = 100; public void run() { try { while(flag) { Thread.sleep(1000); Intent intent = new Intent("com.example.updateUI"); intent.putExtra("data", i); sendBroadcast(intent); i++; } } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- 【Android】Service通过广播更新UI
- android之后台定时更新ui天气【Timer、service、broadcast、activity】
- 【Android】Service通过广播更新UI
- 【Android】关于在Service中通过接口回调更新Activity的UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- android之后台定时更新ui天气【Timer、service、broadcast、activity】
- Activity和Service交互之bindService(回调更新UI)
- Activity与Service通过广播交换复杂对象数据用法详解
- Activity与Service通过广播交换复杂对象数据用法详解
- 利用Handler更简单的实现Service与Activity的通信,更新UI
- Activity和Service交互之bindService(回调更新UI)
- Activity与Service通过广播交换复杂对象数据用法详解
- 通过service和handler实现Notification在后台打开activity
- Android中Activity与Service如何通过广播交换复杂对象数据
- Android Activity通过Service更新时间
- service汇总(service模拟后台下载、service刷新UI、service与Activity生命周期关系、service和活动间的通信)
- 利用广播调用后台服务方法并根据方法返回的内容更新UI
- Android中Activity与Service如何通过广播交换复杂对象数据