6

我有一个家庭更换活动,您可以在其中启动许多应用程序。当您点击 Home 按钮时,您将返回到我的 Home 替换活动。

据我了解,点击主页按钮会创建一个启动主屏幕的意图,然后启动该意图(我可能错了,如果我错了,请纠正我!)。如果是这种情况,我希望在onCreate()创建主屏幕时运行该方法。另一方面,当您启动另一个活动时,主屏幕会调用onPause(). 所以回到它让我假设onResume()被调用。

如果有人可以对这个问题提供一些启发,基本问题是当我点击主页按钮时是否onResume()onCreate()被调用,但欢迎提供更多细节,我正在研究大量使用它的东西,并且想了解很多关于它的信息.

4

3 回答 3

10

当您第一次安装应用程序时,在 Activity 中逐个调用以下方法

  1. onCreate()
  2. 开始()
  3. onResume()

之后,当您按下主页按钮时,然后按照方法调用

  1. 暂停()
  2. 停止()

注意:按下Home键后不会调用 onDestroy() 方法。

以下代码用于演示目的。首先在 Emulator 或 Device 中运行您的代码,然后单击 HOME 按钮在控制台中检查结果。

package com.example.checkdataversion;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
    private static final String TAG = "main";

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    Log.i(TAG, "oncreate");
    setContentView(R.layout.fragment_main);
}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    Log.i(TAG, "onstart");
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    Log.i(TAG, "onresume");

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    Log.i(TAG, "onpause");
}

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    Log.i(TAG, "onstop");
}

@Override
protected void onDestroy() {

    super.onDestroy();
    Log.i(TAG, "ondestroy");
}

}

于 2014-08-11T09:16:39.827 回答
8

点击主页按钮创建启动主屏幕的意图,然后启动该意图

正确的。

如果是这种情况,我希望在创建主屏幕时运行 onCreate() 方法

不必要。如果它已经在运行,它将被调用onNewIntent()

如果有人可以对此事提供一些启示,那么基本问题是当我点击主页按钮时是否调用 onResume() 或 onCreate()

任何时候任何活动从用户输入的角度返回到前台,onResume()都会被调用。主屏幕在这方面应该没有什么不同。

onCreate()在创建活动时调用。现有活动不会被创建,而只是被带回前台。如果触发活动返回前台的是startActivity()调用,则将使用onNewIntent()and调用活动onResume()(通常onStart(),就此而言)。

于 2013-07-09T16:00:50.737 回答
1

很简单,你只需要覆盖 onAttachedToWindow()

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);           
}

然后轻松抓住按下的主页按钮

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {     

    if(keyCode == KeyEvent.KEYCODE_HOME)
    {

       //do some stuff 

    }
});

取自http://nisha113a5.blogspot.fr/

希望这有帮助。

于 2013-07-09T16:01:51.997 回答