LWUIT储备

    在执行某个比较耗时的操作(如网络操作、复杂的计算等)的时候,我们一般需要启动另外一个线程,在线程中完成相关任务。在执行任务的时候,屏幕上可能显示 进度条并附加一些人性化的提示信息。这个在LWUIT框架下可以使用DIALOG来实现。下面封装了一个基础的框架,至于dilaog的ui需要自己美 化。

  //后台任务执行器

  public class ExecutorLoading extends Dialog {

private Label msgTarget = new Label();

public ExecutorLoading() {
this.addComponent(msgTarget);

}

public void showMsg(String msg) {
msgTarget.setText(msg);
}

public void showErrorMsg(String msg) {
//设置产生错误时的图标
msgTarget.setText(msg);
}

public void execute(final Runnable executor, final Runnable afterConfirm) {
this.showMsg("正在处理中,请稍候... ...");

Thread t = new Thread(new Runnable() {

public void run() {
executor.run();
addCommand(new Command("确定") {

public void actionPerformed(ActionEvent evt) {
dispose();//执行完成之后销毁掉对话框
if (afterConfirm != null) {
afterConfirm.run();
}

}
});


}
});

t.start();
this.show();


}

public void execute(final Runnable executor) {
this.execute(executor, null);
}

public static void exe(final Runnable executor) {
ExecutorLoading l = new ExecutorLoading();
l.execute(executor);

}
}

//使用例子

final ExecutorLoading exe = new ExecutorLoading();

exe.execute(new Runnable(){

    public void run()

    {

          exe.showMsg("正在下载中,请稍候...");

         //下载操作

         download();

         exe.showMsg("正在导入数据,请稍候....");

          //验证数据

   if(validate())
{

              exe.showErrorMsg("数据验证失败");

              return;

           }

 

 

   }

 

});

 

 

 

====================================
遇到ui显示顺序或者处理有问题的话,通常使用

Display.getInstance().callSerially(new Runnable() {
public void run() {


//UI处理       

 

                                }
});

能解决问题,这是因为EDT的问题。

===========================
问:从LWUIT的demo的代码看,每一次启动一个demo的时候,都要创建一批对象,比如form等全部重建。
这种方式可能导致很多垃圾对象,这样的效率是不是是值得商榷的?

===========================
lwuit demo在进入特定的演示模块的时候,创建的所有ui组件模块的对象的都是“局部变量”,这些局部变量在run方法退出之后,理论上在某个时候会被KVM GC回收掉。即便有些局部变量被保存给模块的“实例变量”,这些变量也在模块的cleanup方法中做清理。cleanup在从演示模块退回到主面板时被 调用,在cleanup之后,在midlet中紧接着还跟这两句System.gc();来保证局部变量的尽快清理。

这样,尽管每次进入模块的时候都需要有 “一系列对象”创建过程,此即“以时间换空间”之效果。
明白这点之后,反其道而用之,如果要强调某些常用的模块的进入效率,则可以将ui对象保存在模块的局部变量中,每次模块进入的时候,将可能已经存在的模块显示出来,此则是“以空间换时间(体验)”之效果。


但是,如果将已经创建过的UI组件保存在内存中,那要做theme切换的时候,这些已经产生的UI的风格是切换不过来了。只要新创建的UI组件才能使用新的风格。

 

 


===================

研究lwuit的中文问题的思路:
1.找到现有已经使用lwuit实现出来的软件,查看下人家的theme文件中font在中文下是怎样处理的。
2.修改现有的lwuit的theme文件,添加中文字符,再重新生成,以观察其效果。
3.到lwuti的theme下载网站上去down几个theme回来看看。


==================

1.将lwuit demo中的九宫图菜单抽象出来,形成通用的菜单框架

2.将lwuit中的菜单中的文字修改为中文。
修改为中文后,发现文字显示不出来。使用lwuit的资源编辑工具,将lwuit demo中使用到的 “自定义font”
全部删除。重启启动程序,中文才正常显示出来。

接着:
1.感觉没有经过风格定义的lwuit上的中文显示很丑,需要研究下怎样修饰下中文。
2.中文文字偏大在title和menubar上显示偏大,这可能与lwuit使用ascii字符来计算 组件的宽度有关系,这个也可能需要研究调整下。

你可能感兴趣的:(LWUIT储备)