美文网首页
android应用被强杀或应用被回收导致的空指针问题等其他问题

android应用被强杀或应用被回收导致的空指针问题等其他问题

作者: on_i_on | 来源:发表于2020-01-02 10:52 被阅读0次

    在开发中我们经常会遇见app退到后台再打开会出现空指针、页面显示不全等一系列奇怪的问题。

    问题分析:

    当我们的进程被强杀或者被回收的时候,Android系统虽然让你的进程没有了,但是此进程中Activity中栈的信息还是存在的,也就是说此时当你点开此应用的时候程序中的Activity栈信息任然存在,只不过Activity中的数据都没有了,需要重新创建新的Activity数据。

    处理方式:

    分别涉及到:一个单例ConstantInstance 基类BaseAcyivity 首页MainActivity 启动页IndexActivity

    在启动页IndexActivity 存一个单例值
    public class IndexActivity extends BaseAcyivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 在单例中存一个状态标志app属于正常状态
        ConstantInstance.getInstance().setAppStatus(ConstantInstance.STATUS_NORMAL);
        super.onCreate(savedInstanceState);
        、、、、、、
    }
    
    基类BaseAcyivity onCreate方法判断单例的值
    public class BaseAcyivity extends AutoLayoutActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        switch (ConstantInstance.getInstance().getAppStatus()) {
            /**
             * 应用被强杀
             */
            case ConstantInstance.STATUS_FORCE_KILLED:
                //跳到主页,主页lauchmode SINGLETASK
                Intent intent = new Intent(this, MainActivity.class);
                intent.putExtra(ConstantInstance.KEY_HOME_ACTION, ConstantInstance.ACTION_RESTART_APP);
                startActivity(intent);
                break;
        }
    }
    这里我们如果发现单例的状态变为非正常状态,被强杀了,就跳转到首页MainActivity ,
    MainActivity 的启动模式为SINGLETASK,这时候会调用MainActivity 的onNewIntent方法
    
    MainActivity的onNewIntent
     @Override
    protected void onNewIntent(Intent intent) {
        int appStatus = intent.getIntExtra(ConstantInstance.KEY_HOME_ACTION, ConstantInstance.STATUS_NORMAL);
        L.e("appStatus====" + appStatus);
        switch (appStatus) {
            case ConstantInstance.ACTION_RESTART_APP:
                startActivity(new Intent(this, IndexActivity.class));
                finish();
                break;
        }
    }
    这里我们发现需要重启app 重启动页开始 重新启动app
    
    ConstantInstance
    public static final int STATUS_FORCE_KILLED = -1; //应用放在后台被强杀了
    public static final int STATUS_NORMAL = 2; //APP正常态
    public static final int ACTION_RESTART_APP = 9;//被强杀

    相关文章

      网友评论

          本文标题:android应用被强杀或应用被回收导致的空指针问题等其他问题

          本文链接:https://www.haomeiwen.com/subject/lpmnoctx.html