2013-05-03 72 views
1

我对Android开发相当陌生,刚刚完成我的大学项目的第一个应用程序。我添加了一个完美工作的启动画面,它在主菜单之前加载,然后在3秒后切换,但是如果在启动画面期间后退按钮在手机上被按下,则会在3秒后从应用程序中取出通过主菜单会显示。如果在启动画面中按下后退按钮,是否有任何方法可以使应用程序被销毁?启动画面不会破坏后退按钮的按下

这是我splash.java文件

公共类飞溅延伸活动{

@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(); 
    } 

}

+0

你可能想,如果你想要得到的帮助给一些代码... – filmor 2013-05-03 10:43:39

+0

仅供参考,闪屏强烈的Android劝阻应用。 99%的时间,没有理由使用一个。 – Teovald 2013-05-03 12:30:16

+0

我唯一使用的理由是为了满足我的大学要求。 – 2013-05-03 12:37:50

回答

0

尝试:

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

我将此代码添加到我的代码结尾。那是对的吗?就在第二个形式的最后一个大括号之后。如果这是正确的地方,那么这没有解决我的问题,谢谢你的帮助,虽然 – 2013-05-03 12:20:16

+0

他站在最后一个括号。公共类YourClass延伸活动{/ /您的代码...//代码keydown} – andrehsouza 2013-05-03 12:32:51

+0

恩这似乎并没有与我的代码工作。它确定我刚刚禁用了按钮,因此无法在启动屏幕显示时进行推送。尽管感谢您的回复,并且我确定这是我的编码,而不是您的修复程序无法使用。 – 2013-05-03 18:27:05

0

您可以阻止或改变的行为通过在你的飞溅活动代码中使用这个后退按钮更容易(我认为是API 5) :

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

请注意超级部分停止后退按钮关闭您的应用程序或在超级调用之前用延迟时间终止线程。

+0

这帮了我很多,谢谢 – 2013-05-03 12:35:45

2

此代码应该做的是,在内存泄漏自由的方式:

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(); 
       } 
      } 
     } 
    } 
} 
+0

为所问的问题提供了完美的解决方案。 – Santhosh 2014-07-11 10:44:47