您可以使用此替代方法来绕过您的问题。
其背后的想法是创建一个自定义
BackupAgent以接收
onRestoreFinished事件通知,然后终止您的进程,因此,下次您打开该应用程序时,系统将创建您的自定义Application类。
通常使用自定义
BackupAgent强制您实现用于键值备份的抽象方法
onBackup和
onRestore。幸运的是,如果你指定
android:fullBackupOnly在清单中,该系统将使用基于文件的自动备份,而不是作为解释在这里。
首先,创建自定义
BackupAgent:
package com.yocto.cheok;import android.app.ActivityManager;import android.app.backup.BackupAgent;import android.app.backup.BackupDataInput;import android.app.backup.BackupDataOutput;import android.content.Context;import android.os.ParcelFileDescriptor;import android.os.Process;import java.util.List;public class CustomBackupAgent extends BackupAgent { private Boolean isRestoreFinished = false; @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) { //NO-OP - abstract method } @Override public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) { //NO-OP - abstract method } @Override public void onRestoreFinished() { super.onRestoreFinished(); isRestoreFinished = true; } @Override public void onDestroy() { super.onDestroy(); if (isRestoreFinished) { ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); if (activityManager != null) { final List<ActivityManager.RunningAppProcessInfo> runningServices = activityManager.getRunningAppProcesses(); if (runningServices != null && runningServices.size() > 0 && runningServices.get(0).processName.equals("com.yocto.cheok") ) { Process.killProcess(runningServices.get(0).pid); } } } }}
然后将
android:backupAgent="com.yocto.cheok.CustomBackupAgent"和添加
android:fullBackuponly="true"到Android清单中:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yocto.cheok"> <application android:name="com.yocto.cheok.CheokApplication" android:allowBackup="true" android:backupAgent="com.yocto.cheok.CustomBackupAgent" android:fullBackupContent="@xml/my_backup_rules" android:fullBackuponly="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.yocto.cheok.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
下次您将在还原后对应用程序进行午餐时,您将获得:
2019-07-28 22:25:33.528 6956-6956/com.yocto.cheok I/CHEOK: CheokApplication onCreate2019-07-28 22:25:33.642 6956-6956/com.yocto.cheok I/CHEOK: In MainActivity, CheokApplication = com.yocto.cheok.CheokApplication@7b28a29
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)