我的应用程序启动后,我有一个版本点击检查。 但是当模拟器加载它发送请求和所有那些东西时。我的应用程序启动后,它给版本命中值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();
}
});
}
现在它做的是它只显示背景屏幕,没有任何事情没有服务但是当我再次启动时它可以工作。有什么问题?感谢
答案 0 :(得分:0)
如果您的MyScreen
类实际上是Screen
(通过继承),那么在这种情况下您无需同步事件锁。将在UI线程上调用Screen
的构造函数,因此,只需将代码简化为:
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
构造函数末尾所做的事情,因此使用invokeLater()
是合适的。
发布一些更多信息以回应我上面的评论,我会尝试提供更多帮助。