OTA升级,第三方如何发到消息到handler

本文介绍了OTA升级过程中,如何处理下载部分的逻辑。在开机广播中启动Service,通过Application全局变量管理和消息队列进行状态跟踪。在Service中创建Handler接收消息并发送状态广播。为了解决其他类如何向Service的Handler发送消息的问题,定义了一个SystemUpgradeListener接口,Service实现该接口,第三方可以通过回调将消息传递给Handler。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OTA升级之下载部分:
1,首先在收到开机广播中,context.startService(service);

2,在全局application中:public class Base extends Application {
   正在下载判断:
 public boolean IsDownloadRunning=false;
  消息队列
 public ArrayList<StatusMessage> messages = new ArrayList<StatusMessage>();

全局变量访问方法:app = (Base)getApplicationContext();

3,UpgradeService extends Service ,在onCreate中,检查有没有网络,如果没有,在一定时间内给予超时提醒,并注册,监听

ConnectivityManager.CONNECTIVITY_ACTION 广播。在超时期间,有可能有网络了,就走这个广播处理。具体是起一个异步任务,在异步任务

中,连接网络,如果网络是通的,则去初始化下载。

4,在UpgradeService  中有handler:
  public Handler handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   
   setExitTimeOut();//有消息在接收,重新定时,在一定时间内没有消息,即超时了,结束服务。即相当于看门狗功

能。
   
   Log.d(TAG, "handleMessage called: " + msg.what + ", step: ");
   
   Intent intent = new Intent();
   intent.setAction(getPackageName() + ".status");
   intent.putExtra("message", msg);
   sendBroadcast(intent);    //发出状态广播。
   switch(msg.what) {
                       根据接收到的消息类型,填充全局变量的messages 消息队列。
handler.sendMessage(handler.obtainMessage(SystemUpgradeMessage.REBOOT_REQUIRED, 0, 0));

这里有一个问题:handler是本service中的。可以在本service中建立的线程或异步线程使用此handler。其他类中怎么使用?

方法:public interface SystemUpgradeListener {
 public void autoCallback(Message msg);
}

本service 实现这个SystemUpgradeListener 接口:
 public void autoCallback(Message msg) {
  // TODO Auto-generated method stub
  Log.d(TAG, "autoCallback called.");
  Message myMsg = handler.obtainMessage(msg.what, msg.arg1, msg.arg2);
  handler.sendMessage(myMsg);
 }

在其他类中,例如class UpgradeListener implements FileDownLoaderListener{//第三方给的文件下载监听类。
构造时,将本service作为参数给UpgradeListener 。这时,再借用本service对象调用autoCallback,即将消息送达到handler。

 public UpgradeListener(SystemUpgradeListener callback,Base app)
 {
  this.callback=callback;
  this.app=app;
 }
这样就能在第三方发到消息到handler。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值