Android-ProgressBar有一半的时间可以工作
我想在加载活动时显示进度条。但是progressbar只能工作一半的时间,当progressbar不工作时,充电时会显示一个黑屏 这是我的任务:Android-ProgressBar有一半的时间可以工作,android,progress-bar,Android,Progress Bar,我想在加载活动时显示进度条。但是progressbar只能工作一半的时间,当progressbar不工作时,充电时会显示一个黑屏 这是我的任务: class Task extends AsyncTask<String, Integer, Boolean> { @Override protected void onPreExecute() { layout.setVisibility(View.VISIBLE); titre_projet
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;
}
}
以及progressBar的我的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>
当新闻活动开始时,开始获取数据(文章)。在活动的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;
}
}
drawable
,而不是layout
xml。我不知道如何用它来表示进展AsyncTask.doInBackground()
应用于获取数据(网络、解析和UI线程中禁止的其他内容)。在这里,您需要不时调用AsyncTask.publishProgress()
,然后系统在UI线程中调用AsyncTask.onProgressUpdate()
。重写AsyncTask.onProgressUpdate()
以在UI中显示进度(将级别设置为进度条或其他内容)AsyncTask.onPostExecute()
。重写此方法以显示在AsyncTask.doInBackground()
中处理的数据,并根据需要修改视图如果doInBackground中的所有内容都在UI线程上运行,那么异步任务的意义何在?我添加了IU线程,因为如果没有错误,“只有创建视图层次结构的原始线程才能接触其视图”。是的,如果不在UI线程上,则无法修改视图。但是,AsyncTask类的要点是在另一个线程上运行,以避免阻塞UI线程。例如,每次您要阻止线程(网络调用、文件读取、昂贵的计算)时,请使用AsyncTask。那么,我如何删除RunOnUIThread以运行ProgressBar并运行修改视图的活动?您所说的“当我的活动加载时”是什么意思?你的活动负荷是多少?如果您想向用户显示ProgressBar,只需使用:Ok,我只是了解它是如何工作的!谢谢你,穆奇!
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;
}
}
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
}
}