修复闪退

1. 修复旧分类页偶发的空指针闪退
2. 修复多进程判断偶发的空指针闪退
3. 捕抓调用关闭 WebView 安全浏览 API 闪退异常
4. 捕抓通用列表刷新时多线程读写造成的数组越界
This commit is contained in:
juntao
2021-01-05 12:02:47 +08:00
parent cff82379f5
commit ac226e3301
4 changed files with 26 additions and 14 deletions

View File

@ -516,15 +516,21 @@ public class PackageUtils {
* @return 进程名
*/
public static String obtainProcessName(Context context) {
final int pid = android.os.Process.myPid();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> listTaskInfo = am.getRunningAppProcesses();
if (listTaskInfo != null && !listTaskInfo.isEmpty()) {
for (ActivityManager.RunningAppProcessInfo info : listTaskInfo) {
if (info != null && info.pid == pid) {
return info.processName;
try {
final int pid = android.os.Process.myPid();
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> listTaskInfo = am.getRunningAppProcesses();
if (listTaskInfo != null && !listTaskInfo.isEmpty()) {
for (ActivityManager.RunningAppProcessInfo info : listTaskInfo) {
if (info != null && info.pid == pid) {
return info.processName;
}
}
}
} catch (Exception e) {
// 遇到异常了让这次调用正常执行
e.printStackTrace();
return BuildConfig.APPLICATION_ID;
}
return null;
}

View File

@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.os.AsyncTask;
import com.gh.common.util.ExtensionsKt;
import com.lightgame.adapter.BaseRecyclerAdapter;
import java.util.ArrayList;
@ -20,7 +21,6 @@ public abstract class ListAdapter<DataType> extends BaseRecyclerAdapter {
public static final int FOOTER_ITEM_COUNT = 1;
public static final int TOP_ITEM_COUNT = 1;
// TODO mEntityList 适配多线程读写
protected List<DataType> mEntityList = new ArrayList<>();
protected boolean mIsOver;
@ -47,6 +47,7 @@ public abstract class ListAdapter<DataType> extends BaseRecyclerAdapter {
return;
}
// TODO 复用线程
new AsyncTask<Void, Void, DiffUtil.DiffResult>() {
@Override
protected DiffUtil.DiffResult doInBackground(Void... voids) {
@ -66,8 +67,9 @@ public abstract class ListAdapter<DataType> extends BaseRecyclerAdapter {
if (oldItemPosition >= mEntityList.size()) return false;
if (newItemPosition >= updateData.size()) return false;
DataType oldItem = mEntityList.get(oldItemPosition);
DataType newItem = updateData.get(newItemPosition);
// TODO 看看有什么方式可以避免多线程访问 mEntityList (所有 ListAdapter 共用一个线程?)
DataType oldItem = ExtensionsKt.safelyGetInRelease(mEntityList, oldItemPosition);
DataType newItem = ExtensionsKt.safelyGetInRelease(updateData, newItemPosition);
return ListAdapter.this.areItemsTheSame(oldItem, newItem);
}
@ -76,8 +78,8 @@ public abstract class ListAdapter<DataType> extends BaseRecyclerAdapter {
if (oldItemPosition >= mEntityList.size()) return false;
if (newItemPosition >= updateData.size()) return false;
DataType oldItem = mEntityList.get(oldItemPosition);
DataType newItem = updateData.get(newItemPosition);
DataType oldItem = ExtensionsKt.safelyGetInRelease(mEntityList, oldItemPosition);
DataType newItem = ExtensionsKt.safelyGetInRelease(updateData, newItemPosition);
return ListAdapter.this.areContentsTheSame(oldItem, newItem);
}
});

View File

@ -28,7 +28,7 @@ class CategoryDirectoryFragment : ListFragment<CategoryEntity, CategoryDirectory
override fun onCreate(savedInstanceState: Bundle?) {
mViewModel = ViewModelProviders.of(this).get(CategoryDirectoryListViewModel::class.java)
mViewModel.categoryId = arguments?.getString(EntranceUtils.KEY_CATEGORY_ID)!!
mAdapter = CategoryDirectoryAdapter(context!!, arguments?.getString(EntranceUtils.KEY_CATEGORY_TITLE)!!)
mAdapter = CategoryDirectoryAdapter(context!!, arguments?.getString(EntranceUtils.KEY_CATEGORY_TITLE) ?: "")
super.onCreate(savedInstanceState)
}

View File

@ -276,7 +276,11 @@ public class WebFragment extends NormalFragment implements IScrollable {
}
// 避免提示网页有害信息不能访问
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
settings.setSafeBrowsingEnabled(false);
try {
settings.setSafeBrowsingEnabled(false);
} catch (AbstractMethodError e) {
e.printStackTrace();
}
}
mTimeElapsedHelper = new TimeElapsedHelper(this);