Service通过广播Broadcast更新Activity UI
来源:互联网 发布:如何下载淘宝网到桌面 编辑:程序博客网 时间:2024/06/09 13:38
本人小菜鸟一枚,第一次发帖,只想和大家分享一下自己敲代码过程中遇到的问题,在学习Broadcast receiver的时候看到了这篇文章,模仿着做了一遍,发现了一些不同的地方,仅供学友参考参考,不喜勿喷,谢谢!
MainActivity
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btnStart,btnStop,btnRegist,btnStopRecv; public static ProgressBar pb; public static TextView textView; MyReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnStart= (Button) findViewById(R.id.btn_start_service); btnStop= (Button) findViewById(R.id.btn_stop_service); btnRegist= (Button) findViewById(R.id.btn_registe_receiver); btnStopRecv= (Button) findViewById(R.id.btn_stop_receiver); pb= (ProgressBar) findViewById(R.id.progress_bar); textView= (TextView) findViewById(R.id.tv); btnStart.setOnClickListener(this); btnStop.setOnClickListener(this); btnRegist.setOnClickListener(this); btnStopRecv.setOnClickListener(this); } @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,MyService.class); switch (view.getId()){ case R.id.btn_start_service: startService(intent); break; case R.id.btn_stop_service: stopService(intent); break; case R.id.btn_registe_receiver: receiver=new MyReceiver(); IntentFilter filter=new IntentFilter(); filter.addAction("com.example.MyBroadCast"); MainActivity.this.registerReceiver(receiver,filter); break; case R.id.btn_stop_receiver: MainActivity.this.unregisterReceiver(receiver); break; } } //自定义一个广播接收器 public static class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceive"); Bundle bundle=intent.getExtras(); int a=bundle.getInt("i"); pb.setProgress(a); textView.setText(String.valueOf(a)); } }}
MyService
import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MyService extends Service { boolean isStop=false; @Override public void onCreate() { System.out.println("======onCreate====="); super.onCreate(); } @Override public int onStartCommand( Intent intent, int flags, int startId) { System.out.println("======onStartCommand====="); new Thread(){ @Override public void run() { int i=0; while (!isStop){ Intent intent1=new Intent(); intent1.putExtra("i",i); i++; intent1.setAction("com.example.MyBroadCast"); sendBroadcast(intent1); System.out.println("i---------"+i); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent intent) { System.out.println("======onBind====="); // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public boolean onUnbind(Intent intent) { System.out.println("======onUnbind====="); return super.onUnbind(intent); } @Override public void onDestroy() { System.out.println("======onDestroy====="); isStop=true; super.onDestroy(); }}
注意:我一开始照着原博主打的时候程序秒退在网上查了半天也没查出来,最后请教别人才解决了问题
在自定义Receiver的时候,最好定义为静态的,因为不定义为静态的话,程序一启动就容易秒退,然后报错(主要是说java.lang.RuntimeException: Unable to start receiverno和no zero argument constructor)。将publicclassMyReceiver extends BroadcastReceiver
改为
public static class MyReceiver extends BroadcastReceiver{
并将
publicMyReceiver(){ System.out.println("MyReceiver");//构造函数,做一些初始化工作,本例中无任何作用 }
去掉,将其中的控件常量申明为静态后,再运行就可以了
点击打开链接
0 0
- Service通过广播Broadcast更新Activity UI
- Service通过广播Broadcast更新Activity UI
- Service通过广播Broadcast更新Activity UI
- Service通过广播Broadcast更新Activity UI
- Service通过Broadcast更新UI
- Service通过Broadcast更新UI
- 后台Service通过广播更新UI,Activity通过广播停止Service
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- 【Android】Service通过广播更新UI
- 【Android】Service通过广播更新UI
- Broadcast与service----------通过广播启动服务
- Android Service与Activity之间通信:通过Binder对象、Broadcast广播
- Android Service与Activity之间通信:通过Binder对象、Broadcast广播
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- Android- 活动(Activity), 服务(Service), 广播(Broadcast), 广播接收器(BroadcastReceiver)
- 首次服务器配置经验
- 函数的重载--Java基础026
- JQuery中serialize()实例
- 定制django-rest-framework响应
- android mainfast详解
- Service通过广播Broadcast更新Activity UI
- 从 MongoDB 及 Mysql 谈B-/B+树
- Android开发技巧——PagerAdapter实现类的封装
- Tomcat的集群配置(Apache + mod_jk + tomcat来实现tomcat集群的负载均衡)
- 关于viewport,让页面适用任何手机
- Zeppelin安装教程
- append 元素的结尾处添加
- 矩阵相乘
- xcode 快速生成代码块