有没有一种活动可以不显示就开始吗?

时间:2020-07-27 03:23:15

标签: android

我目前在我的项目中有2个活动,活动A(主要)和活动B。

活动B使用Jsoup进行了一些解析,因此加载所有内容都需要一些时间。
因此,我想知道是否可以在应用启动时也启动活动B,但不显示它?

3 个答案:

答案 0 :(得分:1)

为什么在加载活动A时不能使用异步任务,这时在后台通过异步任务开始解析数据,以便获取所有数据。

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
protected Long doInBackground(URL... urls) {
//Use Your parameter instead of this
// code that will run in the background 
return ;
}

protected void onProgressUpdate(Integer... progress) {
// receive progress updates from doInBackground
}

protected void onPostExecute(Long result) {
// update the UI after background processes completes
 }
}

从主线程执行AsyncTask类:

new DownloadFilesTask().execute(url1, url2, url3);

答案 1 :(得分:0)

不要为活动B设置setContentView()。

答案 2 :(得分:0)

长时间运行的后台任务应在服务或异步上完成。 但是,如果有特殊的需要开始不可见的活动,您将在下面找到所有信息...

请记住,在 Headless 活动中,您不能执行长时间运行的任务,这仅仅是为了触发某些事情

public class HeadLessActivity extends Activity {
private static final String TAG = "HeadLessActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "on create called");
}

@Override
protected void onResume() {
    super.onResume();
    Log.d(TAG, "on on resume called called");
    moveTaskToBack(true);
    try {
        Log.d(TAG, "sleeping for 3 seconds");
        Thread.sleep(3000);//todo:small work here
        Log.d(TAG, "resuming");
        Log.d(TAG, "finishing");
        finish();
    } catch (InterruptedException e) {
        e.printStackTrace();
        Log.d(TAG, "could not sleep: " + e.getMessage());
    }
}

在清单中添加活动

<activity android:name=".HeadLessActivity" android:theme="@style/HeadLessTheme.NoDisplay"/>

添加主题

<style name="HeadLessTheme.NoDisplay">
    <item name="android:windowBackground">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:windowDisablePreview">true</item>
    <item name="android:windowNoDisplay">true</item>
</style>