当一个应用在后台运行时,因为系统内存不足导致应用被强杀,这时再返回应用的话,可能会产生空指针的异常,那该如何解决呢?
比如你有WelcomeActivity、HomeActivity、xxxActivity等等
1、首先在Application里面设置一个标记
public class MyApp extends Application { public static int AppStatus=-1;//该状态表示被强杀 @Override public void onCreate() { super.onCreate(); } }2、BaseActivity的处理方法
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(MyApp.AppStatus==-1){ //应用被强杀 protectApp(); }else{ /*应用未被强杀,可以执行初始化操作 setContentView() findViewById()等操作,由子类重写实现 **/ setUpDate(); } } protected void setUpDate() { } protected void protectApp() { Intent intent=new Intent(this,HomeActivity.class); intent.putExtra("isFrceKilled","true"); startActivity(intent); } }3、在欢迎界面里面
public class WelcomeActivity extends BaseActivity{ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { MyApp.AppStatus=0; super.onCreate(savedInstanceState); } @Override protected void setUpDate() { super.setUpDate(); } }4、在HomeActivity里面
public class HomeActivity extends BaseActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String isFrceKilled = getIntent().getStringExtra("isFrceKilled"); if("isFrceKilled".equals("true")){ protectApp(); } } @Override protected void protectApp() { super.protectApp(); startActivity(new Intent(this,WelcomeActivity.class)); finish(); } @Override protected void setUpDate() { //执行初始化等相关操作 setContentView(R.layout.activity_home); } }