我一直在尝试各种示例,以使自己熟悉AsyncTask。到目前为止,我所看到的所有示例都将AsyncTask包含在主要活动的onCreate方法中。我不太喜欢,所以我想看看将其分成自己的班级会有多困难。到目前为止,我有这个:
的 主要活动
package com.example.asynctaskactivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.example.asynctaskactivity.ShowDialogAsyncTask;
public class AsyncTaskActivity extends Activity {
Button btn_start;
ProgressBar progressBar;
TextView txt_percentage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_start = (Button) findViewById(R.id.btn_start);
progressBar = (ProgressBar) findViewById(R.id.progress);
txt_percentage= (TextView) findViewById(R.id.txt_percentage);
Log.v("onCreate","Attempt set up button OnClickListener");
btn_start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
btn_start.setEnabled(false);
new ShowDialogAsyncTask().execute();
}
});
Log.v("onCreate","Success!");
}
}
新的单独的 AsyncTask类
package com.example.asynctaskactivity;
import android.os.AsyncTask;
import android.os.SystemClock;
import android.util.Log;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class ShowDialogAsyncTask extends AsyncTask<Void, Integer, Void>{
int progress_status;
@Override
protected void onPreExecute() {
// update the UI immediately after the task is executed
Log.v("onPreExecute","1");
super.onPreExecute();
Log.v("onPreExecute","2");
//Toast.makeText(AsyncTaskActivity.this,"Invoke onPreExecute()", Toast.LENGTH_SHORT).show();
progress_status = 0;
Log.v("onPreExecute","3");
txt_percentage.setText("downloading 0%");
Log.v("onPreExecute","4");
}
@Override
protected Void doInBackground(Void... params) {
Log.v("doInBackground","1");
while(progress_status<100){
progress_status += 2;
publishProgress(progress_status);
SystemClock.sleep(300);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progressBar.setProgress(values[0]);
txt_percentage.setText("downloading " +values[0]+"%");
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//Toast.makeText(AsyncTaskActivity.this,"Invoke onPostExecute()", Toast.LENGTH_SHORT).show();
txt_percentage.setText("download complete");
btn_start.setEnabled(true);
}
}
最初,这些都在主要活动中,因此提到了asynctask在理论上应该更新的要素。显然,目前这会导致运行时错误,这让我开始思考。如何分隔文件,但仍更新UI线程。
抱歉,如果这是一个愚蠢的问题,对于android开发尤其是后台线程来说还很新。
如何分隔文件,但仍更新UI线程。
奥基 因此,起初您知道AsyncTask
在Activity中作为内部类添加的主要优点是,您可以直接访问所有UI元素,并且可以进行“轻量级” UI更新。
但是,如果您决定将AsyncTask与Activity(也具有一些好处,即eq代码更干净,应用程序逻辑与外观分离)类分开,则可以:
Android AsyncTask sending Callbacks to UI
我猜这就是您所需要的。
问题内容: 至少在Java中,编译器不允许我将两个(或多个)单独的类放在一个类文件中。它迫使我在同一程序包中创建多个文件。我理解为什么会这样,并且我同意这一原则。但是,我已经意识到,我可以轻松地将类嵌套并在单个文件中包含整个程序(不包括导入的库)。我想这会被皱眉,但是我不明白为什么。与标准系统相比,嵌套类的危害和不利之处是什么(除了组织和整洁度的严重损失之外)? 问题答案: 好吧,如果将所有内容保
我在我的项目中添加了google translate api后,出现了这个错误。我使用的是Android Studio3.0,Gradle3.0.0。 我试过这里和这里提出的解决办法,但没有成功。此外,我试着将gradle降级到2.3版本,但这也没有解决问题。
小程序规范中每个页面和组件都是由四个文件描述组成的,wxml/js/wxss/json,分别描述了组件/页面的视图模板,执行逻辑,样式和配置,由于这四个部分彼此之间存在相关性,比如模板中的组件需要在json中注册,数据需要在js中定义,这种离散的文件结构在实际开发的时候体验并不理想;受Vue单文件开发的启发,Mpx也提供了类似的单文件开发模式,拓展名为.mpx。 从下面的简单例子可以看出,.mpx
问题内容: 例如,我的想法是: File1.js File2.js 这段代码是用于节点服务器的,此代码会出现问题吗? 问题答案: 不,只需使用相同的“ io”对象。 File1.js File2.js app.js index.html
问题内容: 我最近开始学习Java,发现每个Java类都必须在单独的文件中声明非常奇怪。我是C#程序员,C#并没有实施任何此类限制。 Java为什么要这样做?有设计上的考虑吗? 编辑(基于几个答案): 为什么在IDE时代Java现在不取消此限制?这不会破坏任何现有代码(或者会破坏吗?)。 问题答案: 根据Java语言规范,第三版: 这种限制意味着每个编译单元最多只能有一个这样的类型。 这种限制使J