-1
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_layout);
        checkForInternetConnection();
        exitWithOutInternet();
        gettingInfo();
        for (int i = 0; i < 999999999; i++){}
        findViewById(R.id.loading_login).setVisibility(View.GONE);
        findViewById(R.id.login_btms).setVisibility(View.VISIBLE);
    }

大家好,我的问题是在 main_activity 启动后有一些程序,此时我想在我的屏幕上有一个进度条。之后将其可见性设置为 GONE 设置菜单 VISIBLE,但在此过程中,只有黑屏。如果代码没有 setVisibility oders,也会出现同样的问题。

谢谢您的帮助

4

4 回答 4

1

我不知道您的“程序”是什么,但听起来您想使用AsyncTask. 此外,您的for loop那里看起来有点可疑,可能没有必要。

实施AsyncTask来完成您的“繁重工作”。您可以在 中设置 a ProgressBar,在onPreExecute()其中更新它onProgressUpdate()(如果需要),然后在 中取消它onPostExecute()。您还可以使用这些方法中的任何一种doInBackground()来更新您的UI.

如果您需要更多帮助,请解释您的方法的作用以及为什么您有这么大for loop的东西似乎什么也没做。

于 2013-08-13T19:28:43.887 回答
0

Android 以及所有系统中的一个基本规则是在 UI 线程或主线程中执行必要的操作

如果你使用你的 UI 线程来思考那个可怕的循环——严重的是,代码非常丑陋,永远不会是一个好的解决方案——或者检查你缺少应用程序的互联网连接。此外,如果您在 onCreate 方法中执行此操作,您将导致您的应用程序需要很长时间才能启动!onCreatem 方法仅用于更本质的代码和应用程​​序界面配置。

有很多方法可以在不缺少应用程序的情况下努力工作。您可以使用线程,或者例如使用具有始终在单独线程中运行的 doInBackground 方法和始终在 UI 线程或主线程上运行的 onPostExecute 方法的 AsyncTask 类。当您在 UI 线程上运行互联网连接时,最近的 Android API 也会启动 RunTimeError

尝试本手册以了解 AsynTask 类 http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-08-13T19:55:09.450 回答
0

您不需要 for 循环。事实上,不仅你不需要它,它还会阻塞你的主线程,这很糟糕。我的猜测是,您使用的是 AsyncTask 或其他类型的线程,并且您需要在任务完成后设置这两个视图的可见性。

这不是你应该这样做的方式。这不仅毫无意义,而且在很多层面上都是错误的。相反,包括最后两种方法:

 findViewById(R.id.loading_login).setVisibility(View.GONE);
 findViewById(R.id.login_btms).setVisibility(View.VISIBLE);

在 AsyncTask 的 onPostExecute() 方法中。(如果您不使用一个,则使用一个)。

于 2013-08-13T19:58:46.923 回答
0

使用android风格的Thread或AsyncTask。它并不完美,但可以解决很多“新线程”可能会恐慌的问题,并且易于理解。

protected void onCreate(Bundle _savedInstanceState) {
    super.onCreate(_savedInstanceState);
    etContentView(R.layout.login_layout); 
    new LongTimeJob(this).execute();
}

static class LongTimeJob extends AsyncTask<Void,Void,Void> {
    private WeakReference<Activity> mActivity;
    public LongTimeJob(Activity _activity) {
        mActivity = new WeakReference<Activity>(_activity);
    }

    protected Void doInBackground(Void... _params) {
        checkForInternetConnection();
        exitWithOutInternet();
        gettingInfo();
        for (int i = 0; i < 999999999; i++){}
    }

    protected Void onPostExecute(Void _result) {
        if(mActivity.get()!=null) {
            mActivity.get()
                .findViewById(R.id.loading_login)
                    .setVisibility(View.GONE);
            mActivity.get()
                .findViewById(R.id.login_btms)
                    .setVisibility(View.VISIBLE);
        }
    } }
于 2013-08-13T20:13:03.593 回答