[英]Android change Activity after few seconds
我的第一个Android项目需要一些帮助。 我想写一个应用程序,它会向你展示带有ImageView的图片几秒钟,我会这样说约4秒钟,之后它会改为显示按钮的第二个活动(仅用于测试)。
我的问题是我的应用程序在我的AVD启动后跳过图片并立即显示按钮。
我该如何解决? 我抬头看了这么久,尝试了很多东西,我希望你们有一个想法:)
谢谢你的帮助
这是我的主要活动代码:
package com.example.parkourspots;
public class MainActivity extends Activity {
private ViewTreeObserver vto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final View myLayout = findViewById(R.id.startscreen);
vto = myLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout(){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent(MainActivity.this, select_activity_class.class);
startActivity(intent);
}
});
}}
检查此代码。
package com.example.parkourspots;
public class MainActivity extends Activity {
private static int TIME_OUT = 4000; //Time to launch the another activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final View myLayout = findViewById(R.id.startscreen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(MainActivity.this, ActivityTwo.class);
startActivity(i);
finish();
}
}, TIME_OUT);
}
});
你可以试试:
public class MainActivity extends Activity {
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler.postDelayed(new Runanble() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this, select_activity_class.class);
startActivity(intent);
}
}, 4000); // 4 seconds
}
}
另外,你可以在AndroidManifest中为你的第二个活动声明添加这个: android:finishOnTaskLaunch="true"
1)睡觉500只能睡眠0.5秒。 所以无论如何它会快速闪烁
2)睡眠不允许线程回到弯针,因此它会冻结你的UI。 这意味着它无论如何都不会更新和绘制。 请改用计时器。 或者在这里发布消息给处理程序是可以接受的。
问题是你只睡了500毫秒(一秒钟的一半),所以看起来很快就会发生这种情况。 您还希望在调用之后删除OnGlobalLayoutListener。 以下是适合您的方法示例:
final Handler handler = new Handler(); // Create a Handler on the main Thread
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout(){
removeOnGlobalLayoutListener(vto, this);
handler.postDelayed(new Runnable(){
public void run(){
Intent intent = new Intent(MainActivity.this, select_activity_class.class);
startActivity(intent);
}
}, 4000); //Post back to the main Thread after 4000 mils (4 seconds)
}
});
@SuppressLint("NewApi")
public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener){
if (Build.VERSION.SDK_INT < 16) v.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
else v.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
}
从不停止UI线程。 UI线程负责让您的应用程序保持响应。
但这是解决您问题的快速而另类的解决方案。
public class MyActivity extends Activity {
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler.postDelayed(new Runnable() {
public void run() {
doStuff();
}
}, 5000);
}
private void doStuff() {
Intent intent = new Intent(MainActivity.this, select_activity_class.class);
startActivity(intent);
}
}
然后必须在意图开始后5秒。
但我建议异步任务
适当和简短的解决方案
制作一个处理程序并给它们一个延迟来回调自己:
final Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 1s
}
}, 1000);
请记住,1秒= 1000毫秒
使用该公式调整时间。
快乐的编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.