【问题标题】:Splash Screen on AsyncTask&MapsAsyncTask&Maps 上的启动画面
【发布时间】:2016-07-12 14:01:32
【问题描述】:

当我启动我的应用程序时,它会通过 AsyncTask 类向数据库提交查询。当应用程序获取数据时,我得到一个白屏,当与 db 的通信完成时,将显示一个地图,其中包含从服务器获取的所有标记。我想知道是否有办法使用 onProgressUpdate 显示启动画面。或者,如果有更好的方法来显示启动画面。我选择的图像是 jpeg 文件。

【问题讨论】:

  • 显示代码你做了什么

标签: android android-asynctask splash-screen


【解决方案1】:

您可以这样做,为您修改 - 对于相同类型的问题,它对我来说效果很好。

私有类 Waiter 扩展 AsyncTask {

    @Override
    protected Void doInBackground(Void... params) {

        try {
            // do your background job like load Map 
        } catch (Exception e) {

            e.printStackTrace();
        }finally{

         }

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {

        //Show Map here or pass Map Activity after parsing completion 
    }
}

【讨论】:

  • Tnx 的回复,但我认为这不是我需要的。您可以在下面找到与 db 通信的代码以及地图的所有内容。但我不知道是否可以通过 onProgressUpdate 显示启动画面.. 我该怎么做...
【解决方案2】:

这是一个可能的(未经测试的)解决方案,有一个 SplashActivity.java 将地图传递给 MainActivity.java,然后解析并显示地图:

SplashActivity.java

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        new AsyncTaskRunner.execute();
    }

    public void mapsRetrieved(List<Map<String, Double>> maps) {
        Intent intent = new Intent(this, MainActivity.class); //adjust class name as needed
        intent.putExtra("maps", maps);
        startActivity(intent);
    }

    private class AsyncTaskRunner extends AsyncTask<Double, Void, List<Map<String, Double>>> {
    //YOUR CODE
        @Override
        protected void onPostExecute(List<Map<String, Double>> maps) {
            mapsRetrieved(maps);
        }
    }
}

在 activity_splash.xml 中,将 .jpeg 作为可绘制资源导入并替换 {YOUR_BACKGROUND_HERE}

activity_splash.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
<!-- REPLACE {YOUR_BACKGROUND_HERE} -->
android:background="@drawable/{YOUR_BACKGROUND_HERE}"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.daose.watinfo.SplashActivity"/>

你可以像这样检索地图

MainActivity.java

public class EventListActivity extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);
        List<Map<String, Double>> maps = (List<Map<String, Double>>) getIntent().getSerializableExtra("maps");
        //YOUR ORIGINAL POST-EXECUTE CODE BELOW
    }
}

然后,在您的 AndroidManifest.xml 中,更改应用打开时启动的活动。

AndroidManifest.xml

<application
    <!-- other stuff -->
    <activity android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <!-- other stuff -->
</application>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多