第十五篇 Android 的Backup服务管理机制--助手模式

2024-04-29 00:38

本文主要是介绍第十五篇 Android 的Backup服务管理机制--助手模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android2.2以后的备份服务功能可以允许用户备份应用数据到云存储中,当应用执行了工厂恢复服务或者转换到一个新的平台上时,如果备份的应用重新安装,系统就自动恢复原先备份的数据,这个过程对用户是完全透明的。GOOGLE目前为Android框架系统提供了一个云存储服务BackupTransportService和一个GOOGLE Backup Transport对象,不过要使用云存储,需要首先向该服务登记你要备份的应用,获得一个Backup Service Key,并以如下格式包括在你要备份的应用的manifest工程文件中。当然你也可以实现你自己的云存储服务和一个备份IBackupTransport对象,或者使用其它第三方云存储服务。Android框架系统也提供了一个供测试的本地IBackupTransport对象。

<meta-dataandroid:name="com.google.android.backup.api_key" 
           android:value="your_backup_service_key"/>

 

 

 

 

      Android4.0以上版本又增加了对应用包的全部备份和恢复功能。

      备份和恢复服务功能通过BackupManagerService系统服务完成,下图是备份管理服务BackupManagerService的类图。    

       

       BackupManagerService服务主要通过六个binder接口(其中包括两个观察对象接口)及四个实现备份和恢复过程的类对外提供服务。

       BackupManagerServiceIBackupManager.Stub的派生对象,实现应用及数据的备份和恢复过程。

BackupManagerService通过IbackupTransport接口通过binder调用实现备份数据的上传和下载。

       应用程序客户端通过BackupManager对象向BackupManagerService服务发出应用数据备份和恢复的请求。

       BackupManager对象在发出备份和恢复的请求之前需要先调用checkServiceBinder函数单例化一个IbackupManager客户端代理对象,通过该对象向BackupManagerService服务发出备份或恢复请求。

        应用数据备份请求通过调用BackupManager对象的dataChanged函数发出。dataChanged函数先调用checkServiceBinder函数获得IbackupManager客户端代理对象后,接着调用服务端的dataChanged同名函数发出备份请求。

       应用数据恢复请求通常由系统在应用安装时发现有要恢复的数据时自动触发,PackageManagerService服务在安装包成功后时发现新安装包不是一个更新包且应用包的工程文件包含backupAgent标示时触发恢复请求。当然用户也可以调用BackupManager对象的requestRestore函数来手工发出一个恢复请求。requestRestore函数同样先调用checkServiceBinder函数获得IbackupManager客户端代理对象,然后调用服务端的beginRestoreSession函数实例化一个ActiveRestoreSession桩对象,并返回客户端一个IrestoreSession类型的binder接口对象,并根据该binder对象实例化一个客户端RestoreSession对象,通过RestoreSession对象使用IrestoreSession接口向服务端发出恢复请求。

        应用包的全部备份和恢复功能目前只能采用命令方式触发,触发时弹出一个用户确认框(一个系统实现的BackupRestoreConfirmation活动)让用户确认,只有用户确认后才能触发应用包的全部备份和恢复功能。

     备份和恢复任务的实现主要采用了模板和代理及助手设计模式,BackupManagerService中主要提供了备份和恢复任务的实现模板,具体备份数据的提供及具体的备份恢复方法通过用户提供的BackupAgent对象提供,备份和恢复任务的实现模板通过钩子调用BackupAgent对象的回调函数完成要备份数据的备份和恢复。

        BackupManagerService中备份和恢复任务的实现模板通过四个类提供。应用数据的备份和恢复任务的实现模板通过PerformBackupTaskPerformRestoreTask两个对象(都是BackupRestoreTask接口的实现)执行,两个对象分别包括相应的应用数据备份和恢复请求的处理函数,根据不同的请求以及当前的状态执行不同的过程。如PerformBackupTask对象和PerformRestoreTask对象都提供了一个execute函数用于执行主要的备份和恢复步骤,execute函数根据备份和恢复过程的当前状态执行不同的函数。

       备份和恢复任务都包括几个子过程。备份任务包括启动备份阶段、开始备份阶段、完成备份阶段三个阶段。在启动备份阶段使用PackageManagerBackupAgent对象备份所有要备份应用包的基本信息(包的版本信息和签名信息);在开始备份阶段执行每一个备份请求,对于每一个备份请求首先调用应用对应的BackupAgent对象把备份数据保存到缓冲区,操作完成后通知BackupManagerService调用BackupTransport对象的performBackup函数完成实际的备份;在完成备份阶段完成备份的后续处理,如写RestoreTokenToken文件,为下一次备份做准备等。

        恢复任务过程包括初始阶段、下载数据阶段、恢复应用包的基本信息阶段、执行恢复请求阶段、完成阶段等五个阶段。

        PerformFullBackupTask对象及PerformFullRestoreTask对象以及两者的内部对象FullBackupRunnerRestoreFileRunnable共同提供了实现全部应用包的备份和恢复的实现模板。四个对象都是Runnable对象,因此运行于独立的线程。FullBackupRunnerRestoreFileRunnable对象执行系统包的备份和恢复任务。

         BackupManagerService服务还包含两个观察者对象接口:IFullBackupRestoreObserverIRestoreObserver

        IFullBackupRestoreObserver用于全部备份和恢复过程的过程事件的监视。IFullBackupRestoreObserver的桩实现对象FullObserverBackupRestoreConfirmation活动的内部类,全部备份和恢复过程产生的事件通过IFullBackupRestoreObserver接口调用FullObserver的相关函数向BackupRestoreConfirmation报告备份和恢复的过程事件

         IRestoreObserver用于应用数据的备份和恢复。IRestoreObserver的桩实现对象位于客户端RestoreSession类中,是RestoreSession类的一个内部包装类RestoreObserverWrapper(实现RestoreObserver对象的包装),以此实现通知事件的异步发送。应用数据备份和恢复过程产生的事件先调用RestoreObserverWrapper相关函数发给RestoreObserverWrapperRestoreObserverWrapper的相关函数通过消息发送机制把事件转发给RestoreObserver对象。

       完成应用数据实际备份和恢复任务及实际数据提供的BackupAgent对象由用户在应用程序中提供,并在应用的工程文件中的application标签下用android:backupAgent属性指定该BackupAgent对象。

    <application android:label="MyApplication"

                android:backupAgent="MyBackupAgent">

    </application>

       BackupAgent是框架提供的一个抽象类,为应用与备份管理服务通讯提供了一个中心接口,BackupAgent类内部包括一个IBackupAgent接口的桩对象BackupServiceBinder,且BackupAgent类的每个回调函数也都包括一个IBackupManager接口参数,因此应用和BackupManagerService服务可以使用BackupAgent的这两种接口实现相互交互。

        BackupManagerService服务调用bindToAgentSynchronous函数借助ActivityManagerService实现应用包含的BackupAgent对象与应用进程的绑定和实例化,BackupAgent对象绑定和实例化后返回BackupAgent对象包含的一个IBackupAgent接口类型的 BINDER对象供BackupManagerService服务使用。 BackupManagerService服务使用该IBackupAgent接口调用BackupAgent对象的回调函数完成实际的备份和恢复工作(doBackupdoRestore等),完成实际备份和恢复工作后使用回调函数传进来的IBackupManager接口参数调用BackupManagerService服务的opComplete函数,通知本次备份和恢复工作的完成结果。

        应用可以采用两种方式实现一个 Backup Agent:一种方式是扩展BackupAgent类,并覆盖相应的回调方法,来实现特定功能的备份和恢复操作。浏览器应用实现书签备份功能的BrowserBackupAgent对象及系统提供的实现共享目录备份功能的SharedStorageAgent就是采用这种方式。

     更通用的方式是扩展BackupAgentHelper类,BackupAgentHelper类是BackupAgent类的包装类。扩展BackupAgentHelper类可以减少需要实现的代码量, 因为BackupAgentHelper类把备份和恢复操作提交给系统已经提供实现相应备份和恢复功能的备份助手类来完成,用户不需要自己实现onBackup() 和onRestore()系统当前提供了如下几个备份助手类来实现某些确定类型的数据的备份和恢复。

     如备份所有命名Shared PreferencesSharedPreferencesBackupHelper类。备份应用数据目录所有文件的FileBackupHelper类和AbsoluteFileBackupHelper类。实现Wallpaper备份的WallpaperBackupHelper类。

    助手类和BackupAgent类间的类图之间的关系见下图

        

       几个助手类都实现了BackupHelper接口,实现备份助手接口功能,并都派生自FileBackupHelperBase,实现备份文件的待上传CACAH文件的基本操作(如写文件文件等)。

     BackupAgentHelper类把备份恢复操作通过BackupHelperDispatcher对象提交给相应助手类。BackupHelperDispatcher对象内部维护一个BackupHelper对象集合,因此BackupAgentHelper的派生类可以同时使用几个BackupHelper对象完成实际的备份和恢复操作。

     SystemBackupAgentSettingsBackupAgentBackupAgentHelper类的派生类,分别实现系统管理数据(当前仅支持系统墙面)及系统和安全设置的备份和恢复。SystemBackupAgent使用了WallpaperBackupHelper助手类来实现相应功能。


原文地址:点击打开链接

这篇关于第十五篇 Android 的Backup服务管理机制--助手模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944679

相关文章

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法