Android - ProgressBar 工作一半时间

Android - ProgressBar work half the time

我想在 activity 加载时显示进度条。但是进度条只工作了一半时间,当进度条不工作时,充电时显示黑屏。

这是我的 AsyncTask:

class Task extends AsyncTask<String, Integer, Boolean> {
    @Override
    protected void onPreExecute() {
        layout.setVisibility(View.VISIBLE);
        titre_projet.setVisibility(View.GONE);
        description_projet.setVisibility(View.GONE);
        image_projet.setVisibility(View.GONE);
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Boolean result) {
        layout.setVisibility(View.GONE);
        titre_projet.setVisibility(View.VISIBLE);
        description_projet.setVisibility(View.VISIBLE);
        image_projet.setVisibility(View.VISIBLE);
        super.onPostExecute(result);
    }

    @Override
    protected Boolean doInBackground(String... params) {

        try {
            runOnUiThread(new Runnable() {
                public void run() {
                    Intent intent = getIntent();

                    if (intent != null) {
                        searchResultats(intent.getStringExtra(EXTRA_PROJET));
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
            return null;
        }
    }

在这段代码中,runOnUiThread中的所有内容都是我显示内容的代码。

这是我在 OnCreate 中的内容:

    image_projet = (ImageView) findViewById(R.id.imageView_projet);
    layout = (LinearLayout) findViewById(R.id.progressbar_view);
    titre_projet = (TextView) findViewById(R.id.titre_projet);
    description_projet = (TextView) findViewById(R.id.description_projet);
    new Task().execute();

我的 XML 进度条:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
android:toDegrees="360"
android:layout_width="match_parent"
android:layout_height="match_parent">
<shape android:shape="ring" android:innerRadiusRatio="3"
    android:thicknessRatio="8" android:useLevel="false">

    <size android:width="76dip" android:height="76dip" />
    <gradient android:type="sweep" android:useLevel="false"
        android:startColor="#447a29"
        android:endColor="#447a29"
        android:angle="0"
        />
</shape>
</rotate>

当您的新闻 Activity 启动时,开始获取您的数据(文章)。在Activity的onCreate方法中,开始你的任务。在任务的 doInBackground 方法中,获取文章(我假设您需要通过网络获取它)。 任务完成后,在 onPostExecute 中更新 UI。

class Task extends AsyncTask<String, Integer, Object> {

    private Activity activity;

    public Task(Activity a){
       activity=a;
    }

    @Override
    protected void onPostExecute(Object article) {
       activity.onArticleFetched(article);
    }

    @Override
    protected Object doInBackground(String... params) {
       Object article = new Article();             
       //Fetch article... may take a few seconds, but you don't care because you are not in the UI thread
       return article;
    }
}

在 Activity 中,做这样的事情:

class NewsActivity extends Activity {

     @Override
     public void onCreate(Bundle a){
       super.onCreate(a);
       //do some stuff.
       task.execute();
       progressBar.setVisibility(View.VISIBLE);
     }

     public void onArticleFetched(Object article){
       progressBar.setVisibility(View.GONE);
       //updateUI
     }
}
  1. 您发布了 drawable 而不是 layout xml。我不知道如何使用它来指示进度。

  2. 请检查AsyncTask referenceAsyncTask.doInBackground() 应该用于获取数据(网络、解析和其他在 UI 线程中禁止的东西)。您有时需要调用 AsyncTask.publishProgress(),然后系统在 UI 线程中调用 AsyncTask.onProgressUpdate()。覆盖 AsyncTask.onProgressUpdate() 以在 UI 中显示进度(将级别设置为进度条或其他)。

  3. 最后AsyncTask.onPostExecute()会在UI线程中调用。覆盖此方法以显示在 AsyncTask.doInBackground() 中处理的数据并根据需要修改视图。