gpt4 book ai didi

Android - 应用程序 Logo Activity

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:16 24 4
gpt4 key购买 nike

我有一个看似简单的问题,但我一辈子都想不通......

我有一个显示公司 Logo 的主要 Activity,本质上是一个初始屏幕。我希望它显示 2 秒左右,然后淡出实际的应用程序主要 Activity 。我尝试使用 sleep 来实现,但是这样做会给我一个空白屏幕来显示 Logo Activity 。似乎直到 sleep 完成后才加载图像。所以基本上应用程序启动,显示黑屏 2 秒,然后转换到我的应用程序。如果我单击返回,则会看到 Logo 。我在这里做错了什么?这是我的标志代码。 logo.xml 有一个带有可绘制资源的 ImageView:

public class Logo extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo);

// Intent to jump to the next activity
Intent intent= new Intent(this, NextActivity.class);
this.startActivity(intent);

SystemClock.sleep(2000);
}
}

最佳答案

您正在阻塞 UI 线程,这是一个很大的禁忌。在您的 onCreate 方法返回之前,系统无法绘制屏幕。做你想做的事情的一种常见方法是启动一个单独的线程等待,然后将一个 Runnable 发布到 UI 线程:

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo);
final Handler handler = new Handler();
final Runnable doNextActivity = new Runnable() {
@Override
public void run() {
// Intent to jump to the next activity
Intent intent= new Intent(this, NextActivity.class);
startActivity(intent);
finish(); // so the splash activity goes away
}
};

new Thread() {
@Override
public void run() {
SystemClock.sleep(2000);
handler.post(doNextActivity);
}
}.start();
}

一种更简单的方法(正如 Athmos 在他的回答中所建议的那样)是让处理程序为您进行倒计时:

Handler mHandler;
Runnable mNextActivityCallback;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.logo);
mHandler = new Handler();
mNextActivityCallback = new Runnable() {
@Override
public void run() {
// Intent to jump to the next activity
Intent intent= new Intent(this, NextActivity.class);
startActivity(intent);
finish(); // so the splash activity goes away
}
};
mHandler.postDelayed(mNextActivityCallback, 2000L);
}

这样做的好处是您可以取消继续进行下一个 Activity (例如,如果用户按下“后退”按钮,或者如果您在这 2 秒内检测到错误情况或其他情况):

@Override
protected void onPause() {
if (isFinishing()) {
mHandler.removeCallbacks(mNextActivityCallback);
}
}

关于Android - 应用程序 Logo Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11130190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com