修复闪退
1. 修复旧分类页偶发的空指针闪退 2. 修复多进程判断偶发的空指针闪退 3. 捕抓调用关闭 WebView 安全浏览 API 闪退异常 4. 捕抓通用列表刷新时多线程读写造成的数组越界
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user