android – 了解UI线程

android – 了解UI线程,第1张

概述我是 Android的初学者,我对Android UI Thread有一些困惑.现在,我知道除了创建UI的线程之外没有任何线程可以修改它. 大. 这是我的第一个Android应用程序中的Activity,这让我感到有些困惑. public class NasaDailyImage extends Activity{ public ProgressDialog modalDialog = n 我是 Android的初学者,我对AndroID UI Thread有一些困惑.现在,我知道除了创建UI的线程之外没有任何线程可以修改它.

大.
这是我的第一个AndroID应用程序中的Activity,这让我感到有些困惑.

public class NasaDailyImage extends Activity{    public ProgressDialog modalDialog = null;//------------------------------------------------------------------------------    @OverrIDe    protected voID onCreate(Bundle savedInstanceState){        //Instantiate progress dialog,skipPing details.        button b = //get reference to button        b.setonClickListener(new OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                modalDialog.show(); // show modal                Toast.makeText(getApplicationContext(),"Getting Feeds",500).show();                new AsyncRetrIEver().execute(new IotdHandler()); // Get the Feeds !!            }        });    }//------------------------------------------------------------------------------    public synchronized voID resetdisplay(boolean parseErrorOccured,boolean imageErrorOccured,IotdHandler newFeeds){        if(parseErrorOccured || imageErrorOccured){            // make a Toast            // do not update display        }else{            // make a Toast            // update display            // based on new Feed        }    }//------------------------------------------------------------------------------    class AsyncRetrIEver extends AsyncTask<IotdHandler,VoID,IotdHandler>{        @OverrIDe        protected IotdHandler doInBackground(IotdHandler... arg0) {            IotdHandler handler = arg0[0];            handler.processFeed(); // get the RSS Feed data !            return handler;        }//------------------------------------------------------------------------------            @OverrIDe        protected voID onPostExecute(IotdHandler fromInBackground){            resetdisplay( // call to update the display            fromInBackground.errorOccured,fromInBackground.imageError,fromInBackground);        }//------------------------------------------------------------------------------}

1. onCreate在UI线程上,所以我可以做任何我想做的事,但onClick不是.为什么我可以在该方法中制作ProgressDialog和Toast?为什么没有错误?
2. AsyncTask是NasaDailyImage的子类.这意味着它可以访问NasaDailyImage的所有方法,包括更新显示的resetdisplay().在onPostExecute中调用resetdisplay(),它在与UI不同的线程上运行.那么,为什么我可以在那里更新显示但却没有错误?

解决方法 > onClick()确实在UI线程上.活动中发生的大多数事情发生在UI线程上.
> onPostExecte()(及其对应的onPreExecute())也在UI线程上运行. AsyncTask.onPostExecte() documentation清楚地说明了这一点. AsyncTask是经过精心设计的,开发人员可以在后台工作之前和之后更新UI.

通常,您的代码将在UI线程上运行,除非您明确告知它.创建AsyncTasks,Runnables或Threads后,您需要确保了解代码的执行位置.在Activity中,假设您在UI线程上通常是安全的.

总结

以上是内存溢出为你收集整理的android – 了解UI线程全部内容,希望文章能够帮你解决android – 了解UI线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存