我是Android的新手,我有一些未解决的问题:
我的项目有两项活动:
// Welcome.java public class Welcome extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1);
run();
}public void startMainAct() { Intent dIntent = new Intent(Welcome.this, MainDisplay.class); Welcome.this.startActivity(dIntent); finish(); } public void run() { try{ Thread.sleep(3000); } catch(Exception ex) { } finally{ startMainAct(); } }
}
// MainDisplay.java public class MainDisplay extends Activity implements Runnable { private static Thread m_thread = null;
@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout2); if (m_thread == null) { m_thread = new Thread(this); m_thread .start(); } } public void run() { try{ Thread.sleep(3000); } catch(Exception ex) { } finally{ finish(); } }
}
当我使用Eclipse作为Android的新配置(启动欢迎活动)运行时, 我在AVD中看到两个具有相同名称的应用程序(一个运行欢迎活动,另一个运行MainDisplay活动)。 我在这里不明白,为什么会有两个但不仅仅会运行第一个活动(欢迎)?
当它运行时,我看不到欢迎活动的布局(只是空白的白色屏幕),但在3秒后仍然会启动其他活动?
当我为Welcome活动实现Runnable时,它可以正常工作吗?你能解释它是如何工作的吗?
非常感谢!
答案 0 :(得分:1)
不要使用将保存UI的Thread.sleep() 使用Timer延迟3秒并跳转到MainActivity
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Intent dIntent = new Intent(Welcome.this, MainDisplay.class);
Welcome.this.startActivity(dIntent);
finish();
}
}, 3000);
答案 1 :(得分:0)
当我使用Eclipse作为Android的新配置(启动欢迎活动)运行时,我看到两个具有相同名称的应用程序(一个运行欢迎活动,另一个运行MainDisplay活动)存在于AVD中。我在这里不明白,为什么有两个但不仅仅是第一个活动的那个(欢迎)?
您可能同时设置了<intent-filter>
launcher
。只有要显示的第一个Activity
应为launcher
。
<category android:name="android.intent.category.LAUNCHER" />
当它运行时,我无法看到欢迎活动的布局(只是空白的白色屏幕),但在3秒后仍然会启动其他活动?
你拨打run()
,在主sleep()
上拨打Thread
,这将使你的UI
无法在3秒钟内执行任何操作,然后启动另一个Activity
{1}}一旦时间到了。这几乎总是,如果不是总是一个坏主意。
当我为Welcome活动实现Runnable时,它可以正常工作吗?你能解释它是如何运作的吗?
您是在单独的Thread
上运行它,以便Thread
睡觉而不是UI Thread
。