0

在我的应用程序启动后,我有一个版本命中检查。但是当模拟器加载它发送请求和所有这些东西时。在我的应用程序启动后,它会给出版本命中值 NULL,但在我关闭应用程序并再次打开它后,它会给出正确的值。

1)我的问题是为什么会发生这种行为,我应该怎么做应用程序启动和版本检查在第一次尝试时给出正确的值!

2)应用程序甚至没有被用户执行,为什么它的代码行被执行??????

public MyScreen()  { 
    Bitmap bitmap = Bitmap.getBitmapResource("background.png");
    this.getMainManager().setBackground(
            BackgroundFactory.createBitmapBackground(bitmap)); 

    synchronized (Application.getEventLock()) 
    {
        UiApplication.getUiApplication().invokeLater(new Runnable() 
        {
            public void run() 
            {
                Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
                LoginScreen();
            }
        }); 
    }

现在它的作用是它只显示背景屏幕并且什么都没有发生没有服务但是当我再次启动它时它可以工作。有什么问题?谢谢

4

1 回答 1

0

如果您的MyScreen类实际上是一种Screen(通过继承),那么在这种情况下您无需同步事件锁。a 的构造函数Screen已经在 UI 线程上调用,因此,只需将您的代码简化为:

public MyScreen()  { 
    Bitmap bitmap = Bitmap.getBitmapResource("background.png");
    this.getMainManager().setBackground(
            BackgroundFactory.createBitmapBackground(bitmap)); 

    UiApplication.getUiApplication().invokeLater(new Runnable() 
    {
        public void run() 
        {
            Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
            LoginScreen();
        }
    }); 

此外,您也可以摆脱invokeLater()呼叫,留下以下内容:

public MyScreen()  { 
    Bitmap bitmap = Bitmap.getBitmapResource("background.png");
    this.getMainManager().setBackground(
            BackgroundFactory.createBitmapBackground(bitmap)); 

    Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
    LoginScreen();

invokeLater()如果您只是想run()从后台线程安全地启动其方法内的代码,或者如果您想在构造函数完成后将其排入队列以运行,您通常会使用。

但是,如果您已经准备好让它立即发生,并且您只是使用该调用来确保

 Status.show("Please Wait...", Bitmap.getPredefinedBitmap(Bitmap.INFORMATION), 1000);
 LoginScreen();

是在 UI 线程上运行的,那么就没有必要了,因为正如我所说,您已经在MyScreen构造函数的 UI 线程上。

但是,我也看不到你在MyScreen构造函数结束时做了什么,所以 using 可能invokeLater()是合适的。

发布更多信息以回应我上面的评论,我会尽力提供更多帮助。

于 2013-01-26T10:00:01.637 回答