优化此代码 activity.getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { activityHashMap.put(activity.hashCode(), new WeakReference<>(activity)); if (activityHashMap != null || activityHashMap.size() != 0) { LogUtils.i(TAG, "go foreGround:" + System.currentTimeMillis()); background.set(false); if (apmThread != null) { if (needLoading.get() && loading.get()) { JSONObject jsonObject = new JSONObject(); JsonUtils.put(jsonObject, ConfigConst.end, System.currentTimeMillis()); Message message = apmThread.apmHandler.obtainMessage(); message.obj = jsonObject; message.what = APMThread_goForeground; apmThread.apmHandler.sendMessage(message); } } needLoading.set(false); } }
时间: 2024-02-10 16:30:48 浏览: 87
android不同activity之间共享数据解决方法
这段代码主要是在应用程序的 Activity 生命周期回调方法中监听应用程序是否进入前台,并且在应用程序进入前台时执行一些操作。优化建议如下:
1. 将 activityHashMap 的判断放在 onActivityResumed 方法的外面,可以减少每次进入前台时的判断次数。
2. 使用 ConcurrentHashMap 来代替 HashMap,以避免在多线程环境中出现并发问题。
3. 避免在 onActivityResumed 方法中进行耗时操作,尤其是网络操作,否则可能会影响用户体验。
4. 可以考虑使用 RxJava 等框架来进行异步操作,以避免阻塞主线程。
下面是优化后的代码:
ConcurrentHashMap<Integer, WeakReference<Activity>> activityMap = new ConcurrentHashMap<>();
activity.getApplication().registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
activityMap.put(activity.hashCode(), new WeakReference<>(activity));
if (activityMap.size() > 0) {
LogUtils.i(TAG, "go foreGround:" + System.currentTimeMillis());
background.set(false);
if (apmThread != null && needLoading.get() && loading.get()) {
JSONObject jsonObject = new JSONObject();
JsonUtils.put(jsonObject, ConfigConst.end, System.currentTimeMillis());
Message message = apmThread.apmHandler.obtainMessage();
message.obj = jsonObject;
message.what = APMThread_goForeground;
apmThread.apmHandler.sendMessage(message);
}
needLoading.set(false);
}
}
});
阅读全文