在Android上管理Splash屏幕活动和后台任务

时间:2015-10-03 00:49:34

标签: android android-fragments android-activity background-process

我有两项活动。一个启动和其他主要活动,将片段加载为页面。目前我的启动没有后台任务,它只是坐得漂亮并转换到主要活动,它执行后续任务。

  1. 设置admob广告
  2. 从服务器请求数据文件
  3. Decript加密密钥
  4. 从磁盘加载一些图像以显示
  5. 如果用户没有感叹,请设置谷歌排行榜或登录。
  6. 我的问题如何将这些任务委托给启动画面?如何在活动之间传递这些复杂的对象(我可以使用静态变量)

    目前我正在考虑放弃飞溅活动并使用主要活动来显示飞溅图像。但主要的活动布局有横幅添加,因此不确定如何用图像覆盖整个屏幕。

    请帮忙!

    我的主要活动

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
    
            <LinearLayout
                android:id="@+id/fragment"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" 
                android:gravity="center" 
                android:orientation="vertical"
                android:layout_above="@+id/fragment_ad"/>
    
             <fragment
                android:id="@+id/fragment_ad"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                class="com.controllers.AdFragment" />
    
        </RelativeLayout>
    
    
    public class SplashActivity extends Activity {
    
        /** Duration of wait **/
        private final int SPLASH_DISPLAY_LENGTH = 2000;
    
    
        String data = "";
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
    
            this.requestWindowFeature(Window.FEATURE_NO_TITLE);
            this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
    
            setContentView(R.layout.splash);
    
    
    
           data = getIntent().getDataString();
            /* New Handler to start the Menu-Activity 
             * and close this Splash-Screen after some seconds.*/
            new Handler().postDelayed(new Runnable(){
                @Override
                public void run() {
                    /* Create an Intent that will start the Menu-Activity. */
    
                    Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class);
                    if(data != "")
                        mainIntent.putExtra(Utils.Challenge_DATA_CODE, data);
                    SplashActivity.this.startActivity(mainIntent);
                    SplashActivity.this.finish();
                }
            }, SPLASH_DISPLAY_LENGTH);
    
    
        }
    

2 个答案:

答案 0 :(得分:1)

也许您可以在背景中创建服务并为前台活动执行一些任务,如下所示:

1)应用程序启动启动屏幕,此活动启动一个服务,该服务开始执行一些后台任务。

2)由于超时或用户触摸而导致启动活动,主要活动显示并检查服务执行的后台任务的进度。

3)请记住,背景任务可能会在主要活动显示之前完成。

@pats,

至于如何将数据从服务传输到主活动,您可以使用视图/数据控制器模型,这意味着有一个单例管理器存储服务生成的复杂数据,然后将这些数据提供给主根据需要进行活动。

希望这些帮助。

答案 1 :(得分:1)

我认为你应该像这样分割工作量:

  1. 用户可以使用该应用之前必须拥有的数据和工作 应该在启动画面中执行,然后你应该执行 在继续主要活动之前等待它完成。您 如果没有理由,不要让用户等待。有一个 您可以通过几种方式将数据传输到主要活动:

    一个。尽可能使用intent extras。如果有自定义对象,则可以    例如,使用Gson序列化它们,并在您的序列中反序列化它们    主要活动。

    湾将数据保存在应用程序类/ sharedpreferences

  2. 您可以使用其他线程开始获取稍后需要的数据,但不要让用户等待 很有道理。