我有两项活动B
和ABut
;广告的布局包含一个B
按钮,可以调用B
。我想在onResume
的布局完全呈现(用户可见的组件)之后执行代码。从Android life Cycle Doc我应该将该代码放入B
方法中。这就是我所做的,但代码仍然在渲染布局之前执行。要在ABut
的布局显示之前检查该代码是否有效执行,我确实在该代码中放了4秒的延迟,结果是:在B
点击后,没有在4秒内发生,然后显示...
public void onAButClick(View v){
startActivity(new Intent(getApplicationContext(),BActivity_.class));
}
...
的布局:这确认了在布局显示之前有效调用onResume内的代码!!!。
这里我给你部分代码:
A代码:
...
@Override
protected void onResume() {
super.onResume();
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG,"Data Loaded");
}
...
B&#39的代码:
{{1}}
有人可以告诉我为什么onResume方法中的代码在布局显示之前执行,如何在视图完全呈现后才能执行它?
由于
答案 0 :(得分:0)
在on Resume上尝试放置handler而不是thread.sleep
super.onResume();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG,"data loaded");
}
}, 4000);
别忘了在你的活动(B)中宣布叛徒,我唠叨这项工作
答案 1 :(得分:-1)
4秒内没有任何事情发生,然后显示B&#39>
这是因为你在主线程中调用Thread.sleep(4000);
所以它被冻结了4000秒。
我希望在B&#39的布局完全呈现后执行代码 (用户可见的组件)
View rootView;
与您的根布局关联。在onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = findViewById(R.id.root);
ViewTreeObserver vto = rootView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// now your layout is completely rendered
// execute your code here
}
});
}
希望有所帮助!