1.解决ad72e265c1提交导致从二级菜单进入第三方应用按返回退出失败,多次按返回键和Home键二级菜单抛空指针Launcher界面奔溃或卡死异常的问题

This commit is contained in:
2026-04-01 17:54:45 +08:00
parent 618e771377
commit b7f20918f5
3 changed files with 30 additions and 11 deletions

View File

@@ -30,7 +30,9 @@ public class CategoryActivity extends FragmentActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
if(FragmentManager.getInstance()==null){
FragmentManager.init(this,this); FragmentManager.init(this,this);
}
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@@ -45,6 +47,7 @@ public class CategoryActivity extends FragmentActivity {
if(bundle!=null){ if(bundle!=null){
mAction=bundle.getString("action"); mAction=bundle.getString("action");
} }
if(FragmentManager.getInstance()==null) return;
if(RecommendFragment.ACTION.equals(mAction)){ if(RecommendFragment.ACTION.equals(mAction)){
showFragment(FragmentManager.getInstance().getFragmentByTag(FragmentManager.RECOMMEND_APPS_TAG),false); showFragment(FragmentManager.getInstance().getFragmentByTag(FragmentManager.RECOMMEND_APPS_TAG),false);
}else if(MusicFragment.ACTION.equals(mAction)){ }else if(MusicFragment.ACTION.equals(mAction)){
@@ -76,8 +79,10 @@ public class CategoryActivity extends FragmentActivity {
@Override @Override
public void setFragmentsDisableRefreshDataFlag() { public void setFragmentsDisableRefreshDataFlag() {
if(FragmentManager.getInstance()!=null){
FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag();
} }
}
@Override @Override
public void popBackStackFragment() { public void popBackStackFragment() {
@@ -86,6 +91,7 @@ public class CategoryActivity extends FragmentActivity {
@Override @Override
public void onDoneEvents(MessageEvent messageEvent) { public void onDoneEvents(MessageEvent messageEvent) {
if(FragmentManager.getInstance() == null) return;
if(MusicFragment.ACTION.equals(messageEvent.action)){ if(MusicFragment.ACTION.equals(messageEvent.action)){
showFragment(FragmentManager.getInstance().getFragmentByTag(FragmentManager.MUSIC_APPS_TAG),false); showFragment(FragmentManager.getInstance().getFragmentByTag(FragmentManager.MUSIC_APPS_TAG),false);
}else if(RecommendFragment.ACTION.equals(messageEvent.action)){ }else if(RecommendFragment.ACTION.equals(messageEvent.action)){
@@ -109,7 +115,9 @@ public class CategoryActivity extends FragmentActivity {
private void onResumeResetDisableFreshDataFlag() { private void onResumeResetDisableFreshDataFlag() {
if(SharedPreferencesUtil.getSharePrefrencesBoolean(this,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG)){ if(SharedPreferencesUtil.getSharePrefrencesBoolean(this,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG)){
SharedPreferencesUtil.setSharePrefrencesBoolean(this,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG,false); SharedPreferencesUtil.setSharePrefrencesBoolean(this,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG,false);
if(FragmentManager.getInstance()!=null){
FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag();
}
if(currentFragment!=null){ if(currentFragment!=null){
currentFragment.onResumeFragment(new MessageEvent()); currentFragment.onResumeFragment(new MessageEvent());
} }
@@ -143,7 +151,9 @@ public class CategoryActivity extends FragmentActivity {
@Override @Override
protected void onDestroy() { protected void onDestroy() {
if(FragmentManager.getInstance()!=null){
FragmentManager.getInstance().destory(); FragmentManager.getInstance().destory();
}
super.onDestroy(); super.onDestroy();
} }
@@ -154,19 +164,25 @@ public class CategoryActivity extends FragmentActivity {
LogUtils.loge("onKeyDown===>"+keyCode); LogUtils.loge("onKeyDown===>"+keyCode);
if(keyCode==KeyEvent.KEYCODE_BACK){ if(keyCode==KeyEvent.KEYCODE_BACK){
if(currentFragment.onKeyDown(keyCode,event)){ if(currentFragment!=null&&currentFragment.onKeyDown(keyCode,event)){
return true; return true;
}else { }else {
//currentFragment.resetDisableRefreshDataFlag(); //currentFragment.resetDisableRefreshDataFlag();
if(FragmentManager.getInstance()!=null){
FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag();
}
return super.onKeyDown(keyCode,event); return super.onKeyDown(keyCode,event);
} }
} }
if(keyCode==KeyEvent.KEYCODE_HOME){ if(keyCode==KeyEvent.KEYCODE_HOME){
LogUtils.loge("onKeyDown===>KEYCODE_HOME"); LogUtils.loge("onKeyDown===>KEYCODE_HOME");
if(currentFragment!=null){
currentFragment.onDetach(); currentFragment.onDetach();
}
if(FragmentManager.getInstance()!=null){
FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag();
} }
}
return super.onKeyDown(keyCode,event); return super.onKeyDown(keyCode,event);
} }

View File

@@ -34,8 +34,9 @@ public class MyApplication extends Application {
logCrash(throwable); logCrash(throwable);
// 可选:重启应用或结束进程 // 可选:重启应用或结束进程
restartApp(); //restartApp();
android.os.Process.killProcess(android.os.Process.myPid()); android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
} }
}); });

View File

@@ -94,8 +94,10 @@ public class AppsFragment extends CategoryFragment {
List<AppBean> appBeanList = (List<AppBean>) data; List<AppBean> appBeanList = (List<AppBean>) data;
// 创建过滤后的列表 // 创建过滤后的列表
List<AppBean> filteredList = new ArrayList<>(); List<AppBean> filteredList = new ArrayList<>();
String selfPackageName = FragmentManager.getInstance().getPackageName();; String selfPackageName = "com.droidlogic.mboxlauncher";
if(FragmentManager.getInstance()!=null){
selfPackageName = FragmentManager.getInstance().getPackageName();
}
for (AppBean appBean : appBeanList) { for (AppBean appBean : appBeanList) {
// 跳过自身应用 // 跳过自身应用
if (appBean.getPackageName().equals(selfPackageName) || appBean.getPackageName().equals("com.android.traceur")) { if (appBean.getPackageName().equals(selfPackageName) || appBean.getPackageName().equals("com.android.traceur")) {