【问题标题】:Which method is run when Home button pressed?按下主页按钮时运行哪种方法?
【发布时间】:2013-07-09 15:57:03
【问题描述】:

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

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

如果有人可以对这个问题提供一些启示,基本问题是当我点击主页按钮时是否会调用 onResume()onCreate(),但欢迎提供更多细节,我正在研究利用这个的东西非常想知道很多。

【问题讨论】:

标签: android oncreate onresume android-homebutton


【解决方案1】:

当你第一次安装应用时,在Activity中一一调用方法

  1. onCreate()
  2. onStart()
  3. onResume()

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

  1. onPause()
  2. onStop()

注意:按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");
}

}

【讨论】:

    【解决方案2】:

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

    正确。

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

    不一定。如果它已经在运行,它将使用onNewIntent() 调用。

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

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

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

    【讨论】:

      【解决方案3】:

      很简单,你只需要重写 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/

      希望对您有所帮助。

      【讨论】:

      • 应用程序不再收到主页键按下。这是为了防止劫持 Home 键。
      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多