gpt4 book ai didi

android - android oncreate 是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 17:52:38 33 4
gpt4 key购买 nike

在执行以下代码时,我发现整个应用在模拟器屏幕上显示任何内容之前会卡住 10000 毫秒。我本以为会出现第一条 toast 消息,然后应用程序卡住 10000 毫秒,然后出现第二条 toast 消息。让我想知道 android 是否在执行它之前堆积了“oncreate”方法中的所有代码。应该是这样吗?

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, new ServiceCode("Hi").s, Toast.LENGTH_SHORT).show();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Toast.makeText(this, new ServiceCode("Hello").s, Toast.LENGTH_SHORT).show();
}

最佳答案

它的行为符合预期。有一个线程负责 UI 更新。它称为主线程。该线程也显示 toast 消息。当您调用 Toast.show() 时,Android 会为主线程 安排一个新任务。当 main thread 完成 onCreate() 时,它将执行此任务并显示 toast。但是因为您阻塞了主线程 10 秒,所以没有显示 toasts。没有人可以显示此消息。但是,10 秒后,两个 toast 将依次出现,因为主线程可以自由显示它们。

最佳做法是永不阻塞主线程。否则您的应用程序将卡住并且用户将看到 ANR(应用程序或响应)消息。如果您需要稍后执行某些事情,则需要将此任务发布到主线程的任务队列中,以便稍后执行。

下面的代码将按照您的预期运行。

public class MainActivity extends Activity {

private Handler handler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// show first toast immediately
Toast.makeText(this, new ServiceCode("Hi").s, Toast.LENGTH_SHORT).show();

// schedule second toast to appear 10 sec later
handler.postDelayed(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,
new ServiceCode("Hello").s, Toast.LENGTH_SHORT).show();
}
}, 10000);

}
}

关于android - android oncreate 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21926722/

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