当我打开新的Activity
时,我会运行新的AsyncTask
来实时更新TextView
。完成Activity
后AsyncTask
被取消。当我打开和关闭此Activity
两次时,一切都正常。但是在第三次和其他所有方法 - doInBackground
方法永远不会开始,尽管任务状态是" RUNNING"。代码看起来像这样。
打开活动:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
final String selectedFromList = (list.getItemAtPosition(position).toString());
Context context = getApplicationContext();
Intent intent = new Intent(context, Main2Activity.class);
intent.putExtra("NetworkText", txts.getText());
intent.putExtra("ChooseCompTitle", new String(selectedFromList));
startActivity(intent);
overridePendingTransition(R.anim.right_in, R.anim.left_out);
}
});
&#34;的onCreate&#34;开始执行AsyncTask:
ConnectionDataPack supportDesktopData;
UpdateTextView taskUpdateText;
protected void onCreate(Bundle savedInstanceState) {
. . . .
final TextView txts = (TextView) findViewById(R.id.textView2);
final ScrollView scroll = (ScrollView) findViewById(R.id.ScrollView01);
final TextView textContent = (TextView) findViewById(R.id.textView4);
if(getIntent().getExtras().getString("NetworkText") != null){
txts.setText(getIntent().getExtras().getString("NetworkText"));
}
if(getIntent().getExtras().getString("ChooseCompTitle") != null){
supportDesktopData = findFitCompPack(getIntent().getExtras().getString("NetworkText"), MainActivity.connectComputer);
}
else finish();
taskUpdateText = new UpdateTextView(supportDesktopData, textContent, scroll);
taskUpdateText.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
if(taskUpdateText.getStatus() == AsyncTask.Status.PENDING){
Log.i("LogsX", "AsyncTask has not started yet.");
}
if(taskUpdateText.getStatus() == AsyncTask.Status.RUNNING){
Log.i("LogsX", "AsyncTask is currently doing work.");
}
if(taskUpdateText.getStatus() == AsyncTask.Status.FINISHED){
Log.i("LogsX", "AsyncTask is done");
}
. . . .
}
我也覆盖了finish方法:
public void finish() {
super.finish();
if(!taskUpdateText.isCancelled()) {
Log.i("LogX", "End AsyncTask!");
taskUpdateText.cancel(true);
}
else Log.i("LogX", "Asynctask is already cancell!");
overridePendingTransition(R.anim.left_in, R.anim.right_out);
}
因为我必须在Activity完成时关闭此AsyncTask。
AsyncTask看起来像这样:
class UpdateTextView extends AsyncTask<Void, Void, Void>
{
int lengthTextBuffor = 0;
ConnectionDataPack compDataPack;
TextView textUpdate;
ScrollView scrool;
public UpdateTextView(ConnectionDataPack compDataPack, TextView textUpdate, ScrollView scrool)
{
this.compDataPack = compDataPack;
this.textUpdate = textUpdate;
this.scrool = scrool;
}
protected void onProgressUpdate(Void... params) {
textUpdate.setText(compDataPack.dataBackupCharacter.toString());
scrool.fullScroll(View.FOCUS_DOWN);
}
@Override
protected Void doInBackground(Void... params) {
Log.i("LogX", "doInBackground Starts!");
boolean startLoop = true;
while(true)
{
synchronized (compDataPack.lock){
if(!startLoop && lengthTextBuffor == compDataPack.dataBackupCharacter.length()) {
try {
compDataPack.lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
startLoop = false;
publishProgress();
}
}
}
}
答案 0 :(得分:1)
尝试以下代码..
if (taskUpdateText != null && taskUpdateText.getStatus() == AsyncTask.Status.PENDING) {
taskUpdateText.execute();
} else if (taskUpdateText == null || taskUpdateText.getStatus() == AsyncTask.Status.FINISHED) {
taskUpdateText = new UpdateTextView();
taskUpdateText.execute();
}
并在onDestroy()中输入以下代码
@Override
public void onDestroyView() {
super.onDestroyView();
if (taskUpdateText != null && taskUpdateText.getStatus() == AsyncTask.Status.RUNNING) {
taskUpdateText.cancel(true);
}
}
答案 1 :(得分:0)
这些问题可能是你的asyntask没有被垃圾收集,或者它仍然在后台运行。
尝试使用以下代码
List<int> list = new List<int>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
list.Add(Convert.ToInt32(dr["Qulif_code"]));
}
int[] arr = list.ToArray();
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == 1)
{
ck_ol.Checked==true ;
}
}