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

时间:2011-09-29 01:31:23

标签: java android android-asynctask

下面是我的编码,它会在调用此Activity时加载图像。但我希望在从服务器检索图像时显示progressDialog,而不是仅向用户显示黑屏。我听说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函数,以便在程序从服务器/缓存加载图像时显示progressDialog。我在互联网上发现的大多数消息来源并没有多说。

1 个答案:

答案 0 :(得分:0)

AsyncTask在某种程度上就像一个线程。它用于处理一些耗时的操作,因此不会阻止主线程。 在您的情况下,AsyncTask是合适的。但是,您想要放置它的位置取决于您的逻辑。

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

添加了:

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

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