活动,线程问题

时间:2014-02-13 01:52:10

标签: android

我是Android的新手,我有一些未解决的问题:

  • 我的项目有两项活动:

    • 欢迎(显示布局1)。
    • MainDisplay(显示layout2)。

    // 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(); } }

    }

    1. 当我使用Eclipse作为Android的新配置(启动欢迎活动)运行时, 我在AVD中看到两个具有相同名称的应用程序(一个运行欢迎活动,另一个运行MainDisplay活动)。 我在这里不明白,为什么会有两个但不仅仅会运行第一个活动(欢迎)?

    2. 当它运行时,我看不到欢迎活动的布局(只是空白的白色屏幕),但在3秒后仍然会启动其他活动?

    3. 当我为Welcome活动实现Runnable时,它可以正常工作吗?你能解释它是如何工作的吗?

非常感谢!

2 个答案:

答案 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