亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

J2ME最佳實踐之屏幕導航

2019-11-18 16:14:11
字體:
來源:轉載
供稿:網友

屏幕導航

除了游戲程序,在通常的MIDP應用程序中,通常會有很多個Screen或Canvas,這些屏幕一般靠命令來實現切換,比如用戶點擊“Next”應該跳到下一屏,點擊“Back”應該返回到上一屏。當屏幕數量相當可觀時,如何在各個屏幕之間導航就值得好好考慮了。

經典的MVC模式可用于屏幕導航,Model用于存儲應用程序數據,而View則是各個Displayable對象,Controller需要單獨的一個類實現。由于MIDlet類本身在生命周期內就只有一個實例,因此MIDlet類就非常適合作為Controller。SUN在bluePRints示例程序SmartTicket中應用了非常復雜的MVC,完全可以滿足MIDP應用程序的導航需要,但是可以看出,缺點是很明顯的:

一是每一個事件都需要一個唯一標識,switch-case語句會隨著屏幕的增加而增加,Controller變得難以維護。二是Controller引用了所有的View,這些View在程序啟動時就被初始化導致很大的內存開銷,而不管它們是否會被顯示。三是大量的Model對象以及異常處理都使得整個應用程序的邏輯大大復雜。

實際上,MIDP應用程序的很多屏幕并不需要復雜的Controller和Model,我們的目標是滿足基本的靈活性的同時保持結構簡單。因此,另外兩種導航方法是用二叉樹和堆棧實現,這里我們只討論用堆棧實現的MIDP導航框架,其基本思想是:每當前進到下一個屏幕時,先將下一個屏幕壓棧,然后再顯示;當返回到上一個屏幕時,先從堆棧中彈出當前屏幕,再從堆棧中取出上一個屏幕并顯示。因此,每個屏幕只需要指定要顯示的下一個屏幕,而不需記住上一個屏幕。這種堆棧導航模型特別適合有規律的“前進”、“后退”屏幕。

由于MIDlet類運行期只有一個實例,因此,使用MIDlet類作為控制器相當合適。此外,我們在一個靜態變量中保存了MIDlet實例,使得訪問MIDlet更加方便:

public class ControllerMIDlet extends MIDlet {
    private static ControllerMIDlet instance = null;

    private Display display = null;
    private Stack ui = new Stack();

    public ControllerMIDlet() { instance = this; }

    protected void startApp() {}
    protected void pauseApp() {}
    protected void destroyApp(boolean unconditional) {}

    public static void goBack() {
        instance.ui.pop();
        Object obj = instance.ui.peek();
        instance.display.setCurrent((Displayable)obj);
    }

    public static void forward(Displayable next) {
        instance.ui.push(next);
        instance.display.setCurrent(next);
    }
}

讓我們更詳細地研究一下實際的應用程序可能出現的幾種屏幕跳轉情況。最簡單的情況是,從一個屏幕前進到另一個屏幕,且返回時仍回到原先的屏幕,這種情況完全符合堆棧的FIFO特點,可以直接調用ControllerMIDlet的forward和goBack方法即可。例如,要顯示一個幫助屏幕:

J2ME最佳實踐之屏幕導航(圖一)

對于一個聯網的應用程序,另一種情況是有一個暫時的等待屏幕。下面是一個在線瀏覽圖片的屏幕:

J2ME最佳實踐之屏幕導航(圖二)

與上面的情況所不同的是,如果用戶在屏幕3選擇“返回”,則應當回到屏幕1而不是屏幕2,因此,對于屏幕2到屏幕3的切換,就不能forward,我們使用replace,拋棄屏幕2,從而實現屏幕3直接可以goBack到屏幕1:

public static void replace(Displayable next) {
    instance.ui.pop();
    instance.ui.push(next);
    instance.display.setCurrent(next);
}


堆棧的變化如下:

J2ME最佳實踐之屏幕導航(圖三)

對于某些更為復雜的情況,例如,登錄過程,如果允許用戶選擇自動登錄,則屏幕跳轉如下:

J2ME最佳實踐之屏幕導航(圖四)

如果用戶不選擇自動登錄,則屏幕跳轉如下:

J2ME最佳實踐之屏幕導航(圖五)

對于這種情況,解決方案是,即使用戶選擇了自動登錄,LoginUI屏幕也要被壓入堆棧中,但是不顯示出來,因此,我們定義了另一個forward(Displayable d1, Displayable d2)方法,它將d1和d2依次壓入堆棧,但只顯示d2。在返回時,如果用戶取消,則返回到LoginUI。總之,通過定義多個導航方法,就可以實現各種操作。

這種基于堆棧的導航模型非常適用于有規律的“前進”,“后退”屏幕,而且只在需要的時候生成新的屏幕。無需關心屏幕狀態,因為返回時上一個屏幕的狀態被完整地保存在堆棧中。

堆棧模型的缺點是數據由不同的屏幕處理,對于一些流程而言,可能需要將每個屏幕的數據依次傳遞給下一個屏幕,越往后的屏幕其構造方法的參數可能也越多。

對于聯網操作等涉及到多線程等待屏幕的情況,我們將在后面給出一個完整的解決方案,并集成到堆棧導航框架中,使應用程序本身完全不用涉及到多線程聯網操作,只需專注于自身邏輯。

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品中文字| 日韩高清a**址| 成人国产在线激情| 久久久久久久久久久久久久久久久久av| 精品国产一区久久久| 亚洲免费av片| 91免费精品国偷自产在线| 国内揄拍国内精品| 日韩在线观看你懂的| 欧美在线www| 成人黄色av网| 日韩精品在线观看网站| 成人黄色av免费在线观看| 日韩久久精品电影| 欧美国产日韩中文字幕在线| 欧美日韩美女视频| 全色精品综合影院| 色中色综合影院手机版在线观看| 日韩国产高清视频在线| 日日噜噜噜夜夜爽亚洲精品| 亚洲欧洲国产精品| 日韩视频在线免费| 亚洲国产欧美久久| 国产亚洲激情在线| 欧美精品做受xxx性少妇| 精品亚洲一区二区三区在线播放| 欧美高清一级大片| 亚洲一区二区国产| 亚洲国产精品va在线看黑人| 国产一区二区三区三区在线观看| 国产精品一香蕉国产线看观看| 精品亚洲一区二区三区在线观看| 亚洲区bt下载| 欧美一级在线播放| 日韩精品免费综合视频在线播放| 黄色91在线观看| 日日噜噜噜夜夜爽亚洲精品| 国产精品女主播视频| 精品国内自产拍在线观看| 精品国内自产拍在线观看| 欧美成人在线网站| 久久精品电影网站| 国产精品午夜国产小视频| 色综合天天狠天天透天天伊人| 欧美日韩ab片| 色偷偷偷综合中文字幕;dd| 国产精品麻豆va在线播放| 国产69精品99久久久久久宅男| 国产情人节一区| 精品亚洲一区二区三区在线播放| 2019亚洲日韩新视频| 97av在线播放| 欧美日韩国产区| 97视频在线免费观看| 成人免费视频在线观看超级碰| 成人欧美在线视频| 国产精品美女www爽爽爽视频| 最近2019中文免费高清视频观看www99| 成人伊人精品色xxxx视频| 91亚洲精品视频| 一夜七次郎国产精品亚洲| 欧美日韩爱爱视频| 一区二区三区国产视频| 日本高清不卡在线| 中日韩美女免费视频网址在线观看| 国产成人精品一区二区在线| 国产精品成人一区二区三区吃奶| 亚洲www永久成人夜色| 日韩精品中文字幕在线| 爽爽爽爽爽爽爽成人免费观看| 亚洲另类xxxx| 日韩在线观看免费全| 国产精品狼人色视频一区| 日韩专区在线观看| 一区二区亚洲欧洲国产日韩| 欧美大学生性色视频| 69av成年福利视频| 最近2019中文免费高清视频观看www99| 日韩av片免费在线观看| 日韩有码在线观看| 日韩av免费观影| 中文国产成人精品久久一| 国产第一区电影| 97国产精品人人爽人人做| 91精品国产91久久久久久吃药| 亚洲精品免费网站| 亚洲美女福利视频网站| 98精品国产高清在线xxxx天堂| 91产国在线观看动作片喷水| 中国china体内裑精亚洲片| 亚洲成人激情在线| 亚洲最大av在线| 亚洲美女自拍视频| 亚洲图片在区色| 性色av一区二区三区红粉影视| 国产一区二区三区在线视频| 久久精品91久久香蕉加勒比| 亚洲视频欧美视频| 宅男66日本亚洲欧美视频| 国产亚洲视频中文字幕视频| 久久精品国产欧美激情| 亚洲国产天堂久久国产91| 久久久在线观看| 日韩三级成人av网| 国产日韩欧美一二三区| 欧美在线中文字幕| 欧美美最猛性xxxxxx| 国产网站欧美日韩免费精品在线观看| 国产剧情久久久久久| 欧美极品少妇全裸体| 亚洲国产另类久久精品| 日韩成人在线视频网站| 中文字幕自拍vr一区二区三区| 国产精品日日摸夜夜添夜夜av| 久久影视电视剧免费网站清宫辞电视| 欧美视频专区一二在线观看| 欧美激情久久久久| 中文字幕亚洲欧美在线| 日韩免费不卡av| 日韩网站免费观看| 亚洲aⅴ日韩av电影在线观看| 亚洲深夜福利在线| 久久久久久久成人| 精品久久久精品| 国产99久久精品一区二区 夜夜躁日日躁| 日韩电影免费在线观看| 国产欧美一区二区三区久久人妖| 欧美精品久久久久久久久| 亚洲在线一区二区| 国产不卡一区二区在线播放| 在线播放精品一区二区三区| 国产精品丝袜久久久久久高清| 日韩精品中文字幕在线观看| 91国语精品自产拍在线观看性色| 夜夜狂射影院欧美极品| 成人黄色短视频在线观看| 91精品国产综合久久香蕉最新版| 日本免费一区二区三区视频观看| 国产mv免费观看入口亚洲| 精品国产31久久久久久| 一本大道香蕉久在线播放29| 亚洲精品欧美日韩| 4k岛国日韩精品**专区| 欧美精品一区在线播放| 欧美日韩免费在线观看| 欧美日韩国产专区| 狠狠躁夜夜躁人人爽超碰91| 亚洲男人天堂网| 日韩视频永久免费观看| 午夜精品一区二区三区在线播放| 日韩黄在线观看| 国产精品视频自拍| 久久久久久av| 97在线视频观看| 日韩在线视频网| 少妇激情综合网| 国产精品视频大全| 日韩网站免费观看高清| 欧美激情第1页| 国产精品白丝jk喷水视频一区| 超碰91人人草人人干| 中文字幕欧美亚洲| 欧美日韩国产成人| 久久69精品久久久久久久电影好|