2

请看下面的代码

ITexture mTexture = new BitmapTexture(
                            mEngine.getTextureManager(),
                            new IInputStreamOpener() {
                                @Override
                                public InputStream open()
                                        throws IOException {


                                    URL url = new URL(
                                            "http://tenlogix.com/cupcakemania/"+ImageName+".png");

                                    HttpURLConnection connection = (HttpURLConnection) url
                                            .openConnection();
                                    connection.setDoInput(true);
                                    connection.connect();
                                    InputStream input = connection
                                            .getInputStream();
                                    BufferedInputStream in = new BufferedInputStream(
                                            input);
                                    return in;
                                }
                            },TextureOptions.BILINEAR_PREMULTIPLYALPHA);

通过这段代码,我从放置在服务器上的图像制作精灵。问题是,当调用 onPaused 时,AndEngine 会卸载所有资源,然后在 onResume 中引擎重新加载资源。由于此纹理是由放置在网络上的图像制成的,因此重新加载需要时间。有没有办法避免这种情况?我不希望它再次重新加载,我想要它是否加载一次,直到我想要它才应该卸载。请注意,我正在后台执行此任务作为异步任务。我很高兴知道您对我的问题的解决方案。谢谢

4

1 回答 1

0

不要在 onPause 中释放此资源。如果只调用了 onPause,那么您的应用程序本质上仍处于前台,但例如屏幕可能已关闭,或者可能有一个弹出对话框部分遮挡它。您希望您的 UI 保持完整,并且您不希望在 onResume 中造成长时间的延迟。

最好在 onStop 或 onDestroy/onDestroyResources 中发布它。如果另一个应用程序占据前台,但您的应用程序尚未完全退出,则会调用 onStop。当您的应用程序完全退出时,将调用 onDestroy。我建议在 onCreateResources 中加载图像,然后在 onDestroyResources 中卸载它。

正如另一位评论者所建议的那样,您还应该考虑在本地缓存图像以允许您的应用程序在没有互联网连接的情况下启动。我想您一定有理由不将图像与您的 APK 一起打包,但您可能需要考虑至少在 APK 中提供一个占位符图像,然后根据需要下载/缓存更新的图像。如果您不想缓存图像,则可以快速显示占位符并异步加载并替换为远程图像。

于 2013-05-30T20:10:58.897 回答