java - 在哪里放置 AsyncTask() 以便我可以调用它来加载图像?

标签 java android android-asynctask

下面是我的代码,当调用此 Activity 时它将加载图像。但我希望在从服务器检索图像时显示进度对话框,而不是仅向用户显示黑屏。我听说 AsyncTask 能够做到这一点,但我坚持在哪里放置 AsyncTask 函数并调用它。

public class LargeImageScroller extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this));
    }

    private static class SampleView extends View {
        private static Bitmap bmLargeImage; //bitmap large enough to be scrolled
        private static Rect displayRect = null; //rect we display to
        private Rect scrollRect = null; //rect we scroll over our bitmap with
        private int scrollRectX = 0; //current left location of scroll rect
        private int scrollRectY = 0; //current top location of scroll rect
        private float scrollByX = 0; //x amount to scroll by
        private float scrollByY = 0; //y amount to scroll by
        private float startX = 0; //track x from one ACTION_MOVE to the next
        private float startY = 0; //track y from one ACTION_MOVE to the next

        public SampleView(Context context) {
            super(context);

            displayRect = new Rect(0, 0, displayWidth, displayHeight);

            scrollRect = new Rect(0, 0, displayWidth, displayHeight);

            bmLargeImage = Bitmap.createBitmap(1035 , 665, Config.ARGB_8888);             
            bmLargeImage = createMap(this.getContext());

        }

        public boolean onTouchEvent(MotionEvent event) {....}

        protected void onDraw(Canvas canvas) {....}

        private static Bitmap createMap(Context context) {...}          

        private static Drawable LoadImageFromWebOperations(String url) {....}

        private static Bitmap decodeFile(File f, int requiredSize) {...}

    }
}

我想知道我应该在哪里放置 AsyncTask 函数,以便在程序从服务器/缓存加载图像时显示进度对话框。我在互联网上找到的大多数来源并没有说太多。

最佳答案

AsyncTask 在某种程度上类似于线程。它用于处理一些耗时的操作,使主线程不会被阻塞。 对于您的情况,AsyncTask 是合适的。然而,你想把它放在哪里取决于你的逻辑。

请阅读SDK:AsyncTask获取更多相关信息。还有一个代码 fragment 可以帮助您。

添加:

嗯,我理解你的担忧。如果您只是想显示一个进度条来告诉用户应用程序正在从服务器下载图像。您可以这样处理:
1. 创建一个包含ProgressBar的xml布局文件。
2. 在LargeImageScroller类的OnCreate中,调用setContentView(R.layout.that_layout)显示进度条,并启动AsyncTask下载图片。
3.在AsyncTask内部,重写onProgressUpdate(Integer...progress)来告诉ProgressBar下载进度。
4. 在 AsyncTask 中,重写 onPostExecute(Long result)。当 AsyncTask 完成时将调用此方法。在这里您可以执行以下操作:SampleView sv=new SampleView(this),然后将图像传递给 sv 对象。然后调用 setContentView(sv) 显示您的图像。

这只是我的思路。我认为您可以在 LargeImageScroller 类或 SampleView 类中使用 AsyncTask。希望此评论有所帮助。

关于java - 在哪里放置 AsyncTask() 以便我可以调用它来加载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591491/

相关文章:

java - ruby 到 android 3DES 加密 - 填充 block 损坏

Android,线程 - 处理程序/异步任务

Android AsyncTask 通过 http Post 发送数据

java - 射出不止一颗子弹

java - 使用 Jackson 仅用毫秒序列化 LocalDateTime

java - 弹跳球。球有滞后。 repaint() 太慢

具有多个 View 的 Android 应用程序 - 最佳实践?

java - 从重定向 URL header 获取位置

java - 在 android Activity 中播放重复的 AudioTrack

Java 正则表达式 : UNGREEDY flag