我正在尝试实现显示ProgressBar更新的简单应用。以下是我的主要任务。
当app首次加载并使用AsyncTask启动ProgressBar上传时,它应显示在UI上(完成并正常工作)
在更新ProgressBar时,用户从应用程序退出,上传值应该增加,因为它在AsyncTask上运行(完成并正常工作)
下次应用加载时,如果仍有更新并运行AsyncTasks(问题)
以下是我的代码的一部分;
public class PUMainActivity extends Activity implements ProgUpAsync.MyThreadListener {
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pumain_activity);
progressBar = (ProgressBar) findViewById(R.id.pumainActivity_progressBar);
}
@Override
public void onTextViewChanging(final int progValue) {
runOnUiThread(new Runnable() {
@Override
public void run() {
progressBar.setProgress(progValue);
}
});
}
}
由于我已经实现了监听器,我可以在我的应用加载时第二次获得当前进度。但ProgressBar UI没有更新。没有编译/运行时错误。
使用侦听器接口更新
以下是侦听器的实现
public class ProgUpAsync extends AsyncTask<Void, Integer, Void> {
private MyThreadListener mCallback;
public interface MyThreadListener {
public void onTextViewChanging(int progValue);
}
public ProgUpAsync(Activity paramActivity) {
try{
mCallback = (MyThreadListener) paramActivity;
}catch(ClassCastException e){
throw new ClassCastException(paramActivity.toString() + " must implement MyThreadListener");
}
}
@Override
protected Void doInBackground(Void... params) {
for(int i=0; i<=100; i++){
if((i%5) == 0){
publishProgress(i);
try {
Thread.sleep(5000);
} catch (InterruptedException ie) {
}
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mCallback.onTextViewChanging(values[0]);
}
}
答案 0 :(得分:0)
问题是在重新启动应用程序后无法检索对ProgUpAsync的引用。也许你必须看到在服务中翻译它。这是做什么样的更新过程。
答案 1 :(得分:0)
最后我做到了。这是我为完成任务而添加的代码。
在 ProgUpAsync ./ava
public void setMainActivity(Activity paramActivity){
try{
mCallback = (MyThreadListener) paramActivity;
}catch(ClassCastException e){
throw new ClassCastException(paramActivity.toString() + " must implement MyThreadListener");
}
}
并在 PUMainActivity .java
try{
if(progUpAsync.getStatus() == AsyncTask.Status.RUNNING){
if(PuConstants.debugEnable)Log.d(TAG, "# Async is RUNNING");
progUpAsync.setMainActivity(this);
}else{
if(PuConstants.debugEnable)Log.d(TAG, "# Async is NOT running");
progUpAsync = new ProgUpAsync(this);
progUpAsync.execute();
}
}catch(NullPointerException npe){
if(PuConstants.debugEnable)Log.w(TAG, "@ Exception caz of progUpAsync : " + npe);
progUpAsync = new ProgUpAsync(this);
progUpAsync.execute();
}