【问题标题】:splash screen wont destroy on press of back button按下后退按钮时启动画面不会破坏
【发布时间】:2013-05-03 10:23:14
【问题描述】:

我对 Android 开发还很陌生,刚刚完成了我的第一个大学项目申请。我添加了一个完美运行的启动屏幕,它在主菜单之前加载,然后在 3 秒后切换,但是如果在启动屏幕期间按下手机上的后退按钮,您将在 3 秒后退出应用程序将显示主菜单。如果在启动画面期间按下后退按钮,有什么办法可以让应用程序被销毁?

这是我的 splash.java 文件

公共类 Splash 扩展 Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.splash);

        Thread SplashTimer = new Thread(){
            public void run(){
            try {
                sleep(3000);//3 seconds
                Intent menuIntent = new Intent("com.example.Main");
                    startActivity(menuIntent);
                }   
                catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                finally {
                        finish();                   
                }
            }
        };
        SplashTimer.start();
    }

}

【问题讨论】:

  • 如果您想获得帮助,您可能需要提供一些代码...
  • 仅供参考,强烈建议不要在 Android 应用中使用启动画面。 99% 的情况下,没有理由使用一个。
  • 我使用它的唯一原因是为了满足我的大学要求。
  • 你试过我的解决方案了吗?这对我有用
  • 我之前做的很快,但不得不赶出去,所以回家试试看,让你不要

标签: android splash-screen


【解决方案1】:

此代码应该以无内存泄漏的方式执行此操作:

public class Splash extends Activity {

    private static final int SPLAH = 1;
    private final MyHandler mHandler = new MyHandler(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.splash);
        Message m = Message.obtain();
        m.what = SPLAH;
        mHandler.sendMessageDelayed(m, 3000);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        mHandler.removeMessages(SPLAH);
    }

    private static class MyHandler extends Handler {
        private final WeakReference<Splash> mActivity;

        public MyHandler(Splash activity) {
            mActivity = new WeakReference<Splash>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            if (msg.what == SPLAH) {
                Splash s = mActivity.get();
                if (s != null) {
                    Intent menuIntent = new Intent("com.example.Main");
                    s.startActivity(menuIntent);
                    s.finish();
                }
            }
        }
    }
}

【讨论】:

  • 完美解决问题。
【解决方案2】:

试试:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
     finish();
     return true;
 }
  return super.onKeyDown(keyCode, event);
}

【讨论】:

  • 我将此代码添加到我的代码末尾。那是对的吗?就在第二种形式最后一个大括号之后。如果这是正确的地方,那么这并没有解决我的问题,谢谢你的帮助
  • 他站在最后一个支架前。 public class YourClass extends Activity { //你的代码 ... //code keydown }
  • 不,这似乎不适用于我的代码。没关系,我刚刚禁用了该按钮,因此在显示初始屏幕时无法按下它。不过,感谢您的回复,我确定是我的编码而不是您的修复无效。
【解决方案3】:

您可以通过在您的启动活动代码中使用它来更轻松地阻止或更改后退按钮的行为(我认为是 API 5):

  @Override
  public void onBackPressed()
  {     
        super.onBackPressed();
  }

要么注释掉 super 部分以停止关闭你的应用程序的后退按钮,要么在 super 调用之前用这里的时间延迟中止线程。

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多