Files
assistant-android/app/src/main/java/com/halo/assistant/HaloApp.java
kehaoyuan 998cf70723 游戏库图标增加占位符/预加载
升级fresco库
对DiffUtilAdapter DiffUtil 进行 try catch 处理
2019-12-19 16:33:49 +08:00

240 lines
8.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.halo.assistant;
import android.app.Application;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.collection.ArrayMap;
import androidx.lifecycle.ProcessLifecycleOwner;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.danikula.videocache.HttpProxyCacheServer;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.gh.base.GHActivityLifecycleCallbacksImpl;
import com.gh.common.LocalBroadcastReceiver;
import com.gh.common.PushManager;
import com.gh.common.constant.Config;
import com.gh.common.exposure.ExposureManager;
import com.gh.common.im.ImReceiver;
import com.gh.common.util.DataUtils;
import com.gh.common.util.DeviceUtils;
import com.gh.common.util.GdtHelper;
import com.gh.common.util.HomeBottomBarHelper;
import com.gh.common.util.PackageHelper;
import com.gh.common.util.TeaHelper;
import com.gh.download.DownloadNotification;
import com.gh.gamecenter.Injection;
import com.gh.gamecenter.entity.SubjectRecommendEntity;
import com.gh.gamecenter.receiver.ActivitySkipReceiver;
import com.gh.gamecenter.receiver.DownloadReceiver;
import com.gh.gamecenter.receiver.InstallAndUninstallReceiver;
import com.gh.gamecenter.receiver.InstallReceiver;
import com.gh.gamecenter.receiver.MeizuPushReceiver;
import com.gh.gamecenter.receiver.NetworkStateReceiver;
import com.gh.gamecenter.receiver.UmengMessageReceiver;
import com.gh.gid.GidHelper;
import com.leon.channel.helper.ChannelReaderUtil;
import com.llew.huawei.verifier.LoadedApkHuaWei;
import com.m7.imkfsdk.chat.ChatActivity;
import com.squareup.picasso.Picasso;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class HaloApp extends TinkerAppLike {
private static HaloApp mInstance;
private static ArrayMap<String, Object> sObjectMap = new ArrayMap<>();
private Executor mMainExecutor = Executors.newCachedThreadPool();
private HttpProxyCacheServer mProxy;
@NonNull
private String mChannel;
private String mGid;
private String ua;
public boolean isRunningForeground = false; // 标记当前 APP 是否处于前台运行中
public boolean isMute = true; // 全局视频静音标记
public HaloApp(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) {
super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
}
public Executor getMainExecutor() {
return mMainExecutor;
}
public static void put(String key, Object object) {
sObjectMap.put(key, object);
}
public static Object get(String key, boolean isRemove) {
if (isRemove) {
return sObjectMap.remove(key);
} else {
return sObjectMap.get(key);
}
}
public static void remove(String key) {
sObjectMap.remove(key);
}
public void setGid(String gid) {
mGid = gid;
}
public String getGid() {
return mGid;
}
public static synchronized HaloApp getInstance() {
return mInstance;
}
public String getChannel() {
return mChannel;
}
public String getUserAgent() {
if (TextUtils.isEmpty(ua)) {
ua = DeviceUtils.getUserAgent();
}
return ua;
}
@Override
public void onCreate() {
super.onCreate();
if (!Injection.appInit(getApplication())) {
return;
}
mInstance = this;
GidHelper.getInstance().init(getApplication());
ProcessLifecycleOwner.get().getLifecycle().addObserver(new ProcessorLifeCycleOwner());
mChannel = ChannelReaderUtil.getChannel(getApplication());
if (mChannel == null || TextUtils.isEmpty(mChannel.trim())) {
mChannel = Config.DEFAULT_CHANNEL;
}
try {
PushManager.init(mChannel);
} catch (Exception e) {
e.printStackTrace();
}
TeaHelper.init(getApplication(), mChannel);
DataUtils.init(getApplication(), mChannel);
// 注册回调以用于做各种统计
registerActivityLifecycleCallbacks(new GHActivityLifecycleCallbacksImpl());
//初始化Fresco
Fresco.initialize(getApplication());
ExposureManager.init();
// 避免在华为设备上出现 `Register too many Broadcast Receivers` 异常,可见 https://github.com/llew2011/HuaWeiVerifier
LoadedApkHuaWei.hookHuaWeiVerifier(getApplication());
PackageHelper.refreshLocalPackageList();
PackageHelper.initList();
initReceiver();
initLocalBroadcast();
initConnectivityChangesReceiver();
initPackageChangesReceiver();
// 耗时操作
mMainExecutor.execute(() -> {
GdtHelper.INSTANCE.init(getApplication());
// 预加载游戏库图标
SubjectRecommendEntity barData = HomeBottomBarHelper.getDefaultGameBarData();
if (!TextUtils.isEmpty(barData.getIconSelect())) {
Picasso.with(getApplication()).load(Uri.parse(barData.getIconSelect())).fetch();
}
if (!TextUtils.isEmpty(barData.getIconUnselect())) {
Picasso.with(getApplication()).load(Uri.parse(barData.getIconUnselect())).fetch();
}
});
}
// 3.5 开始将 targetSdk 升级至 26原来写在 Manifest 的部分 receiver 由于系统限制需要换成在运行时注册
private void initReceiver() {
DownloadReceiver downloadReceiver = new DownloadReceiver();
IntentFilter downloadFilter = new IntentFilter();
downloadFilter.addAction(DownloadNotification.ACTION_DOWNLOAD);
getApplication().registerReceiver(downloadReceiver, downloadFilter);
InstallReceiver installReceiver = new InstallReceiver();
IntentFilter installFilter = new IntentFilter();
installFilter.addAction(DownloadNotification.ACTION_INSTALL);
getApplication().registerReceiver(installReceiver, installFilter);
ActivitySkipReceiver skipReceiver = new ActivitySkipReceiver();
IntentFilter skipFilter = new IntentFilter();
skipFilter.addAction(ActivitySkipReceiver.ACTION_ACTIVITY_SKIP);
getApplication().registerReceiver(skipReceiver, skipFilter);
UmengMessageReceiver umengMessageReceiver = new UmengMessageReceiver();
IntentFilter umengFilter = new IntentFilter();
umengFilter.addAction(UmengMessageReceiver.ACTION);
getApplication().registerReceiver(umengMessageReceiver, umengFilter);
ImReceiver imReceiver = new ImReceiver();
IntentFilter imFilter = new IntentFilter();
imFilter.addAction(ImReceiver.UNIQUE_BROADCAST_ACTION);
imFilter.addAction("action_finish");
getApplication().registerReceiver(imReceiver, imFilter);
MeizuPushReceiver pushReceiver = new MeizuPushReceiver();
IntentFilter pushFilter = new IntentFilter();
pushFilter.addAction("com.meizu.flyme.push.intent.MESSAGE");
pushFilter.addAction("com.meizu.flyme.push.intent.REGISTER.FEEDBACK");
pushFilter.addAction("com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK");
pushFilter.addAction("com.meizu.c2dm.intent.REGISTRATION");
pushFilter.addAction("com.meizu.c2dm.intent.RECEIVE");
getApplication().registerReceiver(pushReceiver, pushFilter);
}
private void initPackageChangesReceiver() {
InstallAndUninstallReceiver receiver = new InstallAndUninstallReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addDataScheme("package");
getApplication().registerReceiver(receiver, intentFilter);
}
private void initConnectivityChangesReceiver() {
NetworkStateReceiver receiver = new NetworkStateReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getApplication().registerReceiver(receiver, intentFilter);
}
public HttpProxyCacheServer getProxy() {
return mProxy == null ? (mProxy = new HttpProxyCacheServer(getApplication())) : mProxy;
}
private void initLocalBroadcast() {
IntentFilter filter = new IntentFilter();
filter.addAction(ChatActivity.ACTION_DISMISS_FLOATING_WINDOW);
filter.addAction(ChatActivity.ACTION_HIDE_UNREAD_DOT);
LocalBroadcastManager.getInstance(getApplication()).registerReceiver(new LocalBroadcastReceiver(), filter);
}
}