【问题标题】:Android onCreate() not workingAndroid onCreate()不起作用
【发布时间】:2019-11-24 06:20:50
【问题描述】:

我在停止我的 Android 应用时遇到了一个奇怪的问题。在我的手机上,我有一个主页按钮和一个后退按钮,现在当我按下主页按钮后进入我的应用程序时,程序会按预期从互联网加载数据,但是当我按下后退按钮后进入我的应用程序时,数据不加载。我在一定程度上对其进行了调试,发现唯一的区别是后退按钮调用了 onCreate() 方法。我很困惑为什么会这样。

这是我的一些代码:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d("DAP", "Created");

        setContentView(R.layout.activity_ltc);

        getActionBar().setTitle("LTC Charts");
        getActionBar().setLogo(
                getResources().getDrawable(R.drawable.new_litecoin_logo_large));

        TextView textView = (TextView) findViewById(R.id.ltcdata);
        textView.setText("Loading data...");

        TimerTask timer = new TimerTask() {

            @Override
            public void run() {

                parseJSON();
            }

        };

        Timer time = new Timer();
        time.schedule(timer, 500, 85);

    }

【问题讨论】:

    标签: java android android-activity back


    【解决方案1】:

    “当我按下返回按钮后进入我的应用程序时,数据不会加载。”

    如果您已经启动了您的应用,当您离开该 Activity 时,该 Activity 将被暂停(并调用 onPause)。当您导航回应用程序时,会恢复相同的活动实例(并调用 onResume)。

    http://developer.android.com/training/basics/activity-lifecycle/index.html

    【讨论】:

    • 按下后退按钮时,活动被终止。活动的以下方法被调用。 onPause() => onStop() => onDestroy() 当您重新启动应用程序时,会调用以下活动生命周期方法。 onCreate() => onStart() => onResume() 参考下面的链接。 stackoverflow.com/questions/5019686/… 那么为什么不会调用 oncreate 方法呢?请澄清
    【解决方案2】:

    这是因为您的活动尚未被破坏。您应该做的是在您的活动的 onresume 中添加一些内容,以便在您返回活动时再次获取数据。如果您希望确定销毁数据并且用户永远不会离开活动,您可以在 onpause 中销毁所有内容。

    【讨论】:

    • onDestroyed 在我按下返回按钮而不是主页按钮时被调用。这让我很困惑,因为当我按下返回按钮后再次启动应用程序时,会调用 onCreate() 并且程序无法按预期工作。
    • 我很确定那是因为后退按钮将活动从堆栈中弹出并完成活动,而主页按钮只是暂停所有内容并转义应用程序。去一些其他应用程序并检查它们的行为。其中一些会重新打开到您所在的位置,而另一些则会在暂停时手动销毁所有内容。
    【解决方案3】:

    正如其他人所说,覆盖onResume()

    一种常见的模式是将通用初始化代码提取到一个方法中,并在需要的地方调用它:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }
    
    @Override
    protected void onResume(){
        super.onResume();
        init();
    }
    
    private void init(){       
       setContentView(R.layout.activity_ltc);
       getActionBar().setTitle("LTC Charts");
       // ....
    }
    

    【讨论】:

      【解决方案4】:

      这可能是因为您的 Activity 在 AndroidManifest.xml 中设置不正确。

      确保活动名称正确。如果您将您的活动插入到某个包中,也包括该名称。例如,我在一个名为“活动”的包中设置了名为“SettingsActivity”(通常默认为 MainActivity)的 activitu:

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      ...
      <activity android:name=".Activities.SettingsActivity">
      ...
      

      【讨论】:

        【解决方案5】:

        使用下面的 on resume 功能。

        @Override
        public void onResume(){
             //will be executed onResume
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多