Blackberry - Application loading screen

后端 未结 2 634
旧巷少年郎
旧巷少年郎 2020-12-07 04:37

My application contains lots of images. so it takes some time to load the application. I want to show a loading screen whhile the application is being loaded. How is it poss

相关标签:
2条回答
  • 2020-12-07 05:08
                    HorizontalFieldManager popHF = new HorizontalFieldManager();
                    popHF.add(new CustomLabelField("Pls wait..."));
                    final PopupScreen waitScreen = new PopupScreen(popHF);
                    new Thread()
                    {
                        public void run() 
                        {
    
                            synchronized (UiApplication.getEventLock()) 
                            {
                                UiApplication.getUiApplication().pushScreen(waitScreen);
                            }
                           //Here Some Network Call 
    
                           synchronized (UiApplication.getEventLock()) 
                            {
                                UiApplication.getUiApplication().popScreen(waitScreen);
                            }
                         }
                     }.start();
    
    0 讨论(0)
  • 2020-12-07 05:28

    Here's an example app that skeletons what your looking to do. Basically, the initial screen you push is a loading screen. During the initial startup sequence you need to spin up a new thread, do your loading stuff and then use invokeLater to 1) make sure your in the event dispatcher and 2) to push a new screen -- or in the case of this example a dialog -- to the screen to have the user progress away from the loading screen.

    Here's the code:

    import net.rim.device.api.ui.Field;
    import net.rim.device.api.ui.UiApplication;
    import net.rim.device.api.ui.container.MainScreen;
    import net.rim.device.api.ui.component.Dialog;
    import net.rim.device.api.ui.component.LabelField;
    
    /**
     * Just a test app.
     */
    public class TestAppMain extends UiApplication 
    {
        /**
         * Default Constructor.
         */
        private TestAppMain() {                
            pushScreen(new AppScreen(this));        
        }
    
        /**
         * App entry point.
         * @param args Arguments.
         */
        public static void main(String[] args) {
            TestAppMain app = new TestAppMain();                       
            app.enterEventDispatcher();
        }
    
        /**
         * Main application screen.
         */
        private static class AppScreen extends MainScreen 
        {
            UiApplication _app;
    
            /**
             * Default constructor.
             */
            public AppScreen(UiApplication app) {
                // Note: This screen just says "Loading...", but you could
                // add a loading animation.
                _app = app;
                LabelField title = new LabelField("App Name",
                        LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
                setTitle(title);
    
                LabelField loading = new LabelField("Loading...",
                        LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
    
                add(loading);
    
                // Queue up the loading process.
                startLoading();
            }               
    
            /**
             * Create the loading thread. Make sure to invoke later as you will
             * need to push a screen or show a dialog after the loading is complete, eventhough
             * you are creating the thread before the app is in the event dispatcher.
             */
            public void startLoading() { 
                Thread loadThread = new Thread() {
                    public void run() {
                        // Make sure to invokeLater to avoid problems with the event thread.
                        try{ 
                            // Simulate loading time
                            Thread.sleep(5000);
                        } catch(java.lang.InterruptedException e){}
    
                        // TODO - Add loading logic here.
    
                        _app.invokeLater( new Runnable() {                
                            public void run() {                    
                                // This represents the next step after loading. This just shows 
                                // a dialog, but you could push the applications main menu screen.
                                Dialog.alert("Load Complete");
                            }
                        });
                    }
                };
                loadThread.start();
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题