我有一个有很多活动的应用程序.其中有InitialActivity加载核心数据.这是一个启动器活动,如果没有加载的数据,下一个活动都无法生存.
所以我启动应用程序,InitialActivity正在加载数据,然后导航到MainActivity然后我正在浏览一些FarAwayActivity.然后我转向其他应用程序(其中一些是重型游戏),我的应用程序在后台被杀死.我已经在我的日志中插入了日志调用Application.onCreate(),当我切换回应用程序时,我可以看到它再次被调用.所以我确定应用程序在后台被杀死了.但Android带来了最后一个FarAwayActivity顶部,它立即崩溃,因为所有加载的数据都是空的.
所以问题是:我怎样才能告诉应用程序从InitialActivity什么时候开始(并且只有当它被杀死和恢复时)?类似于"忘记我的背堆",但可能是自动地,在清单中.
我已经阅读并尝试了Activity标记文档中的所有内容,但没有任何内容符合我的期望.最接近的是android:clearTaskOnLaunch="true",但是当从桌面重新启动应用程序时,它会清除堆栈上的所有其他活动(并且应用程序尚未被杀死,因此所有数据都可用).为了清楚起见,我想在应用程序实际被杀之后才开始使用InitialActivity.
我有一个可以在线和离线工作的 Android 应用程序,我正在使用 Glide 进行图像加载。下载数据库后,我想并行启动两个任务:将所有图像下载到磁盘并加载当前屏幕(然后是下一个屏幕)所需的所有图像。问题是要下载的图像量非常大,并且当前屏幕请求的图像似乎添加在同一下载队列的末尾。所以我最终得到“空”屏幕,直到所有图像都下载到磁盘缓存。我怎样才能让这些任务并行工作?
public class GlideActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_glide);
        downloadAllImages();
        updateUi();
    }
    private void updateUi() {
        ImageView imageView1 = (ImageView) findViewById(R.id.image_view1);
        ImageView imageView2 = (ImageView) findViewById(R.id.image_view2);
        ImageView imageView3 = (ImageView) findViewById(R.id.image_view3);
        cachedGlideRandomRequest().into(imageView1);
        cachedGlideRandomRequest().into(imageView2);
        cachedGlideRandomRequest().into(imageView3);
    }
    private void downloadAllImages() {
        for (int i = 0; i < 50; i++) {
            cachedGlideRandomRequest().preload();
        }
    }
    private DrawableRequestBuilder<String> cachedGlideRandomRequest() {
        return Glide.with(getApplicationContext())
                .load("https://unsplash.it/200/300?image=" + System.nanoTime() % 1000)
                .diskCacheStrategy(DiskCacheStrategy.SOURCE);
    }
}
我想要的是在downloadAllImages()仍在处理背景的同时在 ImageViews …