此代码适用于我的启动画面活动:
@Override
protected void onResume() {
super.onResume();
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}
}, 5000);
}
当我点击设备后退按钮时,MainActivity将完成并再次启动SplashActivity,并再次使用onResume方法获取调用, 这里的问题是处理程序没有再次执行,MainActivity在5秒后也没有重新启动!我希望它再次执行!
问题是什么,我该怎么办?
感谢您的关注。
答案 0 :(得分:1)
我修改了你的代码一点点检查
@Override
protected void onResume() {
super.onResume();
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
}
}, 5000);
}
答案 1 :(得分:1)
移动您的代码段以启动onCreate()
到finish()
。在startActivity()
方法之后立即致电finish()
。同时删除MainActivity
课程中的{{1}}来电。
答案 2 :(得分:1)
将代码放入MainActivity
s onCreate()
,例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}, 5000);
}
在onResume()
中放置这样的处理程序不是一个好方法
答案 3 :(得分:1)
首先,我想告诉你这不是添加启动画面的正确方法。根本不需要处理程序。
一般情况下,启动屏幕只是您在应用启动时看到的自然延迟。添加自己的5秒延迟根本不推荐。
现在,如果您想要对自然延迟进行样式化并制作正确的自定义初始屏幕,那么您需要遵循此过程。
首先创建一个background_splash.xml drawable,它将作为启动画面的用户界面
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/gray"/> <item> <bitmap android:gravity="center" android:src="@mipmap/ic_launcher"/> </item> </layer-list>
接下来,您必须将此设置为style.xml中的Spash屏幕背景
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> </style> <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground">@drawable/background_splash</item> </style> </resources>
现在您相应地配置了您的Android清单
<activity android:name=".SplashActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
最后将您的Splash屏幕java类编码为
public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } }
来源: bignerdranch
因此,您不必使用处理程序线程来操纵应用程序启动时间。这将消除应用程序启动延迟的白色背景,并为您提供自定义的xml drawable。
作为参考,您可以查看所有Google应用程序(如YouTube等)在没有白色背景延迟和其他高质量应用程序启动的情况下启动。
请考虑为您的启动画面使用此正确的流程。它只是一个窗口背景,没有像多线程,处理程序等那样复杂的
答案 4 :(得分:1)
我测试了你的代码,它为我工作没有任何问题。请检查我的代码。
当你按下第二个Activity的后退按钮时,你真的想要执行处理程序。你应该把Handler放在&#34; onStart&#34;或&#34; onResume&#34;只要。因为&#34; onCreate&#34;按第二个活动的后退按钮时未调用第一个活动的方法。
如果你的场景是Splash Screen,你应该在Intent执行后关闭它。因为我们只应该第一次显示启动画面。
@Override
protected void onResume() {
Log.i(TAG,"onResume Called");
super.onResume();
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}, 5000);
}
和SecondActivity代码如下。
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
}