领透酷医云安卓客户端

App.java 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.linkdialy.mobile.kuyicloud;
  2. import android.app.Application;
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.util.Log;
  6. import com.linkdialy.mobile.kuyicloud.utils.X5ProcessInitService;
  7. import com.tencent.smtt.sdk.QbSdk;
  8. import com.tencent.smtt.sdk.TbsListener;
  9. import com.tencent.smtt.sdk.WebView;
  10. import java.io.File;
  11. /**
  12. * Created by csx on 2018/10/29.
  13. */
  14. public class App extends Application {
  15. private static App instance;
  16. private String TAG = "BaseApplication";
  17. @Override
  18. public void onCreate() {
  19. super.onCreate();
  20. instance = this;
  21. initTbs();
  22. }
  23. private void initTbs() {
  24. //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
  25. /* [new] 独立Web进程演示 */
  26. if (!startX5WebProcessPreinitService()) {
  27. return;
  28. }
  29. /* 设置允许移动网络下进行内核下载。默认不下载,会导致部分一直用移动网络的用户无法使用x5内核 */
  30. QbSdk.setDownloadWithoutWifi(true);
  31. QbSdk.setCoreMinVersion(QbSdk.CORE_VER_ENABLE_202112);
  32. /* SDK内核初始化周期回调,包括 下载、安装、加载 */
  33. QbSdk.setTbsListener(new TbsListener() {
  34. /**
  35. * @param stateCode 用户可处理错误码请参考{@link com.tencent.smtt.sdk.TbsCommonCode}
  36. */
  37. @Override
  38. public void onDownloadFinish(int stateCode) {
  39. Log.i(TAG, "onDownloadFinished: " + stateCode);
  40. }
  41. /**
  42. * @param stateCode 用户可处理错误码请参考{@link com.tencent.smtt.sdk.TbsCommonCode}
  43. */
  44. @Override
  45. public void onInstallFinish(int stateCode) {
  46. Log.i(TAG, "onInstallFinished: " + stateCode);
  47. }
  48. /**
  49. * 首次安装应用,会触发内核下载,此时会有内核下载的进度回调。
  50. * @param progress 0 - 100
  51. */
  52. @Override
  53. public void onDownloadProgress(int progress) {
  54. Log.i(TAG, "Core Downloading: " + progress);
  55. }
  56. });
  57. /* 此过程包括X5内核的下载、预初始化,接入方不需要接管处理x5的初始化流程,希望无感接入 */
  58. QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
  59. @Override
  60. public void onCoreInitFinished() {
  61. // 内核初始化完成,可能为系统内核,也可能为系统内核
  62. }
  63. /**
  64. * 预初始化结束
  65. * 由于X5内核体积较大,需要依赖wifi网络下发,所以当内核不存在的时候,默认会回调false,此时将会使用系统内核代替
  66. * 内核下发请求发起有24小时间隔,卸载重装、调整系统时间24小时后都可重置
  67. * 调试阶段建议通过 WebView 访问 debugtbs.qq.com -> 安装线上内核 解决
  68. * @param isX5 是否使用X5内核
  69. */
  70. @Override
  71. public void onViewInitFinished(boolean isX5) {
  72. Log.i(TAG, "onViewInitFinished: " + isX5);
  73. // hint: you can use QbSdk.getX5CoreLoadHelp(context) anytime to get help.
  74. }
  75. });
  76. }
  77. public static App getInstance() {
  78. return instance;
  79. }
  80. public void installApp(String pathString) {
  81. Intent install = new Intent(Intent.ACTION_VIEW);
  82. install.setDataAndType(Uri.fromFile(new File(pathString)), "application/vnd.android.package-archive");
  83. install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  84. startActivity(install);
  85. }
  86. /**
  87. * 启动X5 独立Web进程的预加载服务。优点:
  88. * 1、后台启动,用户无感进程切换
  89. * 2、启动进程服务后,有X5内核时,X5预加载内核
  90. * 3、Web进程Crash时,不会使得整个应用进程crash掉
  91. * 4、隔离主进程的内存,降低网页导致的App OOM概率。
  92. *
  93. * 缺点:
  94. * 进程的创建占用手机整体的内存,demo 约为 150 MB
  95. */
  96. private boolean startX5WebProcessPreinitService() {
  97. String currentProcessName = QbSdk.getCurrentProcessName(this);
  98. // 设置多进程数据目录隔离,不设置的话系统内核多个进程使用WebView会crash,X5下可能ANR
  99. WebView.setDataDirectorySuffix(QbSdk.getCurrentProcessName(this));
  100. Log.i(TAG, currentProcessName);
  101. if (currentProcessName.equals(this.getPackageName())) {
  102. this.startService(new Intent(this, X5ProcessInitService.class));
  103. return true;
  104. }
  105. return false;
  106. }
  107. }