java - Android Activity 生命周期 --- 如何在重新启动 Activity 时重置变量?

标签 java android lifecycle android-lifecycle

我会尽量让我的问题简短:

我有这个简单的 Activity,它用于检查和显示设备是否支持 GSM 以及是否具有双 SIM 卡。我的问题是:-退出应用程序后,第二张 SIM 卡打开并重新启动应用程序,复选框显示它仍未准备好。使用 Activity 的第二张卡启动并关闭时也是如此。 - 当应用程序在任务管理器中被杀死,并再次启动时,它第一次显示正确的 SIM 状态,但是当使用返回键退出时,出现与前一点所述相同的问题。 -我在Android应用生命周期的所有阶段的所有回调函数中清除了这个Activity的所有变量,但问题仍然存在。

我哪里做错了,还是算不上。提前感谢您的宝贵帮助

贾尼

特此 Activity 代码:

package com.szilij.mymobilecontrols;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.telephony.TelephonyManager;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.TextView;


public class MainActivity extends Activity {

private CheckBox hasGsmCheckBox;
private CheckBox isDualSimCheckBox;
private String imeiSIM1;
private String imeiSIM2;
private boolean isSIM1Ready;
private boolean isSIM2Ready;
private boolean isDualSIM;
private TelephonyManager manager;
private TelephonyInfo telephonyInfo =null;

private void clearVariables() {
    hasGsmCheckBox  = null;
    isDualSimCheckBox = null;
    imeiSIM1 = null;
    imeiSIM2 = null;
    isSIM1Ready = false;
    isSIM2Ready = false;
    isDualSIM = false;
    manager = null;
    telephonyInfo =null;    
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    clearVariables();

    hasGsmCheckBox = (CheckBox)findViewById(R.id.checkBox1);
    isDualSimCheckBox = (CheckBox)findViewById(R.id.checkBox2);

    hasGsmCheckBox.setChecked(false);
    isDualSimCheckBox.setChecked(false);

    manager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

    if (manager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
        hasGsmCheckBox.setChecked(true);


        telephonyInfo = TelephonyInfo.getInstance(this);

        imeiSIM1 = telephonyInfo.getImeiSIM1();
        imeiSIM2 = telephonyInfo.getImeiSIM2();

        isSIM1Ready = telephonyInfo.isSIM1Ready();
        isSIM2Ready = telephonyInfo.isSIM2Ready();

        isDualSIM = telephonyInfo.isDualSIM();
        isDualSimCheckBox.setChecked(isDualSIM);


        TextView tv = (TextView) findViewById(R.id.textView1);
        tv.setText(" IME1 : " + imeiSIM1 + "\n" +
                " IME2 : " + imeiSIM2 + "\n" +
                " IS DUAL SIM : " + isDualSIM + "\n" +
                " IS SIM1 READY : " + isSIM1Ready + "\n" +
                " IS SIM2 READY : " + isSIM2Ready + "\n");

        clearVariables();

    }
    else {
        hasGsmCheckBox.setChecked(false);
        isDualSimCheckBox.setChecked(false);
    }

    clearVariables();

    super.onStart();
}

@Override
protected void onRestart() {
    // TODO Auto-generated method stub
    clearVariables();

    super.onRestart();
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    clearVariables();

    super.onPause();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    clearVariables();

    super.onResume();
}

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    clearVariables();

    super.onStop();
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    clearVariables();

    super.onDestroy();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

最佳答案

clearVariables 只是清除局部变量hasGsmCheckBox/isDualSimCheckBox,这不是复选框 View 本身。要使显示的复选框准备就绪,您必须使用 checkBox.setChecked(true),就像您在 onStart 方法中所做的一样;

onStart() 仅在 Activity 不再可见时调用

参见 http://i.stack.imgur.com/YvmA8.png

我想您可能会尝试将 onStart() 中的内容放入 onResume() 中。

关于java - Android Activity 生命周期 --- 如何在重新启动 Activity 时重置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24293969/

相关文章:

Android:打开带有两点方向的 map Intent

asp.net - 为什么 ASP.NET 动态控件即使添加到 Page_Load 中也能保持 ViewState?

从 sleep 中醒来后的 Android Activity 生命周期

java - if 语句中的条件

java - 如何使用viewpager2和fragmentstateadapter动态添加和删除 fragment ?

Android studio 添加外部源码目录

javascript - 如何在 PUT 请求后使用 Fetch-Suspense 重新渲染 React 组件

java - 我们如何决定是使用 ZonedDateTime 还是 LocalDateTime?

java - Neo4J创建关系在远程挂起,但节点创建成功

java - 我的 JFrame 应用程序中显示多个任务