2013-10-04 65 views
0

我正在开发一个应用程序,当应用程序启动时,屏幕显示(启动屏幕),等待3秒钟并转到第二个屏幕。所以当我在手机或模拟器上使用返回按钮时,它会进入第一个屏幕,然后等待3秒钟,然后再次启动第二个屏幕,到目前为止没有问题。活动在onResume()后重新开始()

但是当我在第一个屏幕时按回车键,我去菜单,但定时器/处理程序事件已经开始,所以应用程序再次启动,即使我在菜单中。应用。启动第二个屏幕后启动,返回到菜单后如何避免此问题?当用户进入手机菜单时,我不想重新启动应用程序。我试图用onPause和onStop做一些事情,但无法管理它。我需要类似的东西,如果从splasn屏幕返回,我认为应用程序必须关闭。

这是我的延迟代码,PreAcilis是第一个出现的屏幕,Acilis是第二个屏幕。

@Override 
protected void onResume() { 

    final Handler handle = new Handler(); 
    Runnable delay = new Runnable() { 
     public void run() { 
      Intent intent_basla = new Intent(PreAcilis.this, Acilis.class); 
      startActivity(intent_basla); 
     } 
    }; 
    handle.postDelayed(delay,3000); 
    super.onResume(); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
} 

}

+0

我想试着从“的onResume”得到处理,把在的onCreate –

+0

我这样做,那么应用程序启动两次。 –

+0

因此,第一个屏幕是闪屏?或者除了图像之外还有别的东西,比如按钮或者其他东西? – Zohaib

回答

0

正如我明白,,我想你需要这样的

private Thread timer=new Thread(new Runnable() { 
    @Override 
    public void run() { 
     // TODO Auto-generated method stub 
     try{ 
      Thread.sleep(3000); 
     } 
     catch(Exception e){ 
      Log.e("Timer","Error"); 
     } 
     finally{ 
      startActivity(intent); 
     } 
    } 
}); 

而且onCreate方法使用的一些事情该

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_splash); 
    intent=new Intent(this,MainActivity.class); 
    timer.start(); 
} 
0

我会用一个CountDownTimer并在onDestroy/onStop方法中停止它。

0

覆盖后退按钮,以便每当用户按下后退按钮比你可以自己停止计时器,然后关闭应用程序。

@Override 
public void onBackPressed() { 
    // Stop the timer 
    // close the app. 
} 
0

1)如果你只是想摧毁处理器(处理器必须是一流的,全球性):

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
      Intent intent_basla = new Intent(PreAcilis.this, Acilis.class); 
      startActivity(intent_basla);     
      //delete callbacks 
     } 
    return super.onKeyDown(keyCode, event); 
} 

2)但是,如果你只使用活动作为“闪屏” :

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
      Intent intent_basla = new Intent(PreAcilis.this, Acilis.class); 
      startActivity(intent_basla);   
      finish(); 
     } 
    return super.onKeyDown(keyCode, event); 
} 

3)在我看来,只是显示启动画面,使用屏幕大小的布局,您的意见和显示/隐藏在onCreate()用postDelayed。通过这种方式,您只需处理1个Activity类就可以避免奇怪的导航堆栈。

编辑:

4)我用这对我的一些应用程序,我没有遇到你的问题。启动这个活动,它显示了一个闪屏和3秒后它触发下一个活动,没有别的:

public class PreAcilis extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.pre_acilis); 
    super.onCreate(savedInstanceState); 

    new Handler().postDelayed(new Runnable(){ 
     public void run() 
     { 
      Intent i = new Intent(getApplicationContext(),Acilis.class);    
      startActivity(i); 

      finish(); 
     } 
    }, 3000); 
} 

} 
+0

谢谢,但没有奏效,是的第一个屏幕是闪屏我忘了这个词。 –

+0

在preactivity中,重写onKeyPressed并完成活动。同时删除处理程序声明中的最后一个。这样,活动中的所有内容都将被销毁。 –

+0

检查我的第四点,编辑后 –