从post中调用活动在asynctask中执行

时间:2012-12-18 04:27:49

标签: android android-asynctask android-activity

我有一个Class:GalleryLoop,其中包含所有细节

我有一个单独的类:LoadingScreenActivity,它有一个扩展AsyncTask的内部类

我正在尝试拨打.execute中的LoadingScreenActivity,以便我可以加载GalleryLoop

有没有办法在不合并两个Java CLass文件的情况下执行?

代码如下:

   private class LoadViewTask extends AsyncTask<Void, Integer, Void>
    {
        //A TextView object and a ProgressBar object
        private TextView tv_progress;
        private ProgressBar pb_progressBar;

        //Before running code in the separate thread
        @Override
        protected void onPreExecute() 
        {
            //Initialize the ViewSwitcher object
            viewSwitcher = new ViewSwitcher(LoadingScreenActivity.this);
            /* Initialize the loading screen with data from the 'loadingscreen.xml' layout xml file. 
             * Add the initialized View to the viewSwitcher.*/
            viewSwitcher.addView(ViewSwitcher.inflate(LoadingScreenActivity.this, R.layout.loadingscreen, null));

            //Initialize the TextView and ProgressBar instances - IMPORTANT: call findViewById() from viewSwitcher.
            tv_progress = (TextView) viewSwitcher.findViewById(R.id.tv_progress);
            pb_progressBar = (ProgressBar) viewSwitcher.findViewById(R.id.pb_progressbar);
            //Sets the maximum value of the progress bar to 100             
            pb_progressBar.setMax(100);

            //Set ViewSwitcher instance as the current View.
            setContentView(viewSwitcher);
        }

        //The code to be executed in a background thread.
        @Override
        protected Void doInBackground(Void... params) 
        {
            /* This is just a code that delays the thread execution 4 times, 
             * during 850 milliseconds and updates the current progress. This 
             * is where the code that is going to be executed on a background
             * thread must be placed. 
             */
            try 
            {
                //Get the current thread's token
                synchronized (this) 
                {
                    //Initialize an integer (that will act as a counter) to zero
                    int counter = 0;
                    //While the counter is smaller than four
                    while(counter <= 4)
                    {
                        //Wait 850 milliseconds
                        this.wait(850);
                        //Increment the counter 
                        counter++;
                        //Set the current progress. 
                        //This value is going to be passed to the onProgressUpdate() method.
                        publishProgress(counter*25);
                    }
                }
            } 
            catch (InterruptedException e) 
            {
                e.printStackTrace();
            }
            return null;
        }

        //Update the TextView and the progress at progress bar
        @Override
        protected void onProgressUpdate(Integer... values) 
        {
            //Update the progress at the UI if progress value is smaller than 100
            if(values[0] <= 100)
            {
                tv_progress.setText("Progress: " + Integer.toString(values[0]) + "%");
                pb_progressBar.setProgress(values[0]);
            }
        }

        //After executing the code in the thread
        @Override
        protected void onPostExecute(Void result) 
        {
            /* Initialize the application's main interface from the 'main.xml' layout xml file. 
             * Add the initialized View to the viewSwitcher.*/
            viewSwitcher.addView(ViewSwitcher.inflate(LoadingScreenActivity.this, R.layout.main, null));
            //Switch the Views
            viewSwitcher.showNext();
            //ImageView = viewSwitcher.findViewById(R.id.imageView1);
            setContentView(R.layout.main);
        }
    }

另一个类文件:

public class GalleryLoop extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//details of Galleryloop
}

我是Android的新手,我不确定以下哪个是更好的选择:

1.在AsyncTask启动之前启动GalleryLoop

2.在AsyncTask中启动GalleryLoop(在do_in_background中)

提前致谢。

1 个答案:

答案 0 :(得分:1)

我对this post的回答可以帮助你...使用Asynctask类的构造函数并将调用活动传递给Asynctask ......

然后,一旦Asynctask完成,你就可以在调用活动中调用一个回调函数。

这应该允许您为GalleryLoop活动使用一个类,并在后台使用Asynctask运行加载屏幕活动,完成后调用回调函数。