Java 在onCreate中启动新活动只会延迟
我有一个简单的活动,只显示了两个按钮,我想加载另一个活动,只要一个完成加载Java 在onCreate中启动新活动只会延迟,java,android,android-activity,Java,Android,Android Activity,我有一个简单的活动,只显示了两个按钮,我想加载另一个活动,只要一个完成加载 @Override public void onCreate(Bundle savedInstanceState) { dbg("starting on create"); super.onCreate(savedInstanceState); dbg("stting content view"); setContentView(R.layout.main); createDr
@Override
public void onCreate(Bundle savedInstanceState) {
dbg("starting on create");
super.onCreate(savedInstanceState);
dbg("stting content view");
setContentView(R.layout.main);
createDrPopup();
}
private void createDrPopup(){
dbg( "created new activity");
startActivityForResult(new Intent(this, DrPopup.class),
DR_POPUP_ACTIVITY_ID);
}
我没有发现这段代码有任何错误,但是新活动没有正确加载。这样我只得到了一个白屏幕
但如果我延迟调用新活动,则一切正常
@Override
public void onCreate(Bundle savedInstanceState) {
dbg("starting on create");
super.onCreate(savedInstanceState);
dbg("stting content view");
setContentView(R.layout.main);
Thread splashTread = new Thread() {
@Override
public void run() {
try {
sleep(500);
} catch(InterruptedException e) {
} finally {
createDrPopup();
}
}
};
splashTread.start();
}
private void createDrPopup(){
dbg( "created new activity");
startActivityForResult(new Intent(this, DrPopup.class),
DR_POPUP_ACTIVITY_ID);
}
我的问题是:
是否有更好的方法等待活动完成加载。我甚至不能确定每次500毫秒是否足够
谢谢你的建议
为dr_弹出窗口请求的代码(这很简单)
以及两种布局
主要
弹出窗口
编辑:问题似乎是由清单行@android:style/Theme.Dialog引起的
从提供的代码中,我看不出有任何理由说明为什么必须插入500毫秒的延迟…插入延迟是没有意义的。
需要作出一些澄清:
1.您是否在原始活动中进行了大量处理?
2.有目的地调用startActivityForResult(因为您的代码片段没有显示任何onActivityResult实现)
我将尝试实现一个最小的例子,并更新后尽快
−− 更新
在几次尝试通过并行聊天会话来理解和解决这个问题之后,我在一个新的1.5模拟器上重现了这个问题。
问题最终来自对被调用方活动使用android:theme=“@android:style/theme.Dialog”。在android 1.5(设备和模拟器)上可以观察到这个问题。无论在第二个布局中声明了什么,只要关联的活动启动,都不会显示任何内容。显示为空白,按下后退按钮启动活动的瞬态显示,但转到第一个活动(后面的部分为标称)。我无法解释为什么会发生这种情况,我建议zidarsk8给PopupWindow一个尝试或定义一个自定义样式(基于android主题的尝试/错误方法。对话框源定义)。您好,您还可以提供DrPopup的代码吗。嗯,我不确定,但是,当另一个活动仍在onCreate()生命周期方法中时,ActivityManager可能无法处理启动新活动的问题。计时器允许onCreate()有足够的时间来完成…我已经添加了代码和xml文件,我应该添加我正在使用android 1.5。我同意这完全是胡说八道,这就是我在这里要问的,因为我不知道为什么只有延迟才能起作用。但情况似乎是这样。我刚从onStart开始尝试,但结果是一样的,没有延迟地启动会使新活动没有任何按钮或任何东西。它在这里毫不延迟地工作(具有简单的startActivity),除了WebView出现在其他布局元素之后。我用我在这里发布的代码再次尝试id,它可以工作,但是有一件事我忘了发布清单文件。多亏了你,我现在知道问题出在这行android:theme=“@android:style/theme.Dialog”
it如果你把它放在第二个活动中,事情可能不会正常进行,从你的屏幕截图中,我意识到你是指使用popup;)弹出窗口顺便问一下,为什么不使用弹出窗口呢?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbg("Created new activity");
setContentView(R.layout.dr_webview);
dbg("web view created");
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Spinner android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="wrap_content" android:id="@+id/spinner1"></Spinner>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_popup_webview_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">
<WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_popup_webview" android:layout_width="fill_parent" android:layout_height="100dip"/>
<LinearLayout android:id="@+id/frameLayout1" android:layout_height="100dip" android:layout_width="fill_parent" android:orientation="horizontal">
<EditText android:id="@+id/dr_submit_text" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="4">
<requestFocus></requestFocus>
</EditText>
<Button android:text="Button" android:id="@+id/dr_submit_button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1"></Button>
</LinearLayout>
</LinearLayout>
<activity android:theme="@android:style/Theme.Dialog"
android:name=".DrPopup"
android:label="@string/dr_popup">
</activity>