在程序中使用setContentView()后的黑屏

时间:2013-08-13 19:21:22

标签: android

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启动后有一些程序,在这段时间我想在屏幕上有一个progressBar。之后,将其可见性设置为GONE设置菜单可见,但在此过程中,只有黑屏。 如果代码没有setVisibility oders,则会出现同样的问题。

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

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

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

如果您需要更多帮助,请说明您的方法有何用处以及为什么您拥有那些似乎没有做任何事情的巨大{{1}}。

答案 1 :(得分:0)

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

如果你使用你的UI线程让思考就像那个可怕的循环 - 那么代码非常丑陋,永远不能成为一个好的解决方案 - 或者检查你没有App的互联网连接。 此外,如果你在onCreate方法中这样做,你将导致你的应用程序需要很长时间才能开始! onCreatem方法仅适用于更重要的代码和应用程​​序界面配置。

有很多方法可以在不缺App的情况下努力工作。您可以使用线程,或者例如使用AsyncTask类,该类具有始终在单独线程中运行的doInBackground方法和始终在UI线程或主线程上运行的onPostExecute方法。 此外,最近的Android API在UI线程

上运行Internet连接时会启动RunTimeError

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

答案 2 :(得分:0)

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

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

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

在AsyncTask的onPostExecute()方法中。 (如果您没有使用,请使用一个)。

答案 3 :(得分: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);
        }
    } }