ファイルを圧縮および解凍するテストアプリを作成しようとしています。ファイルの圧縮/解凍を行うためのオープンソース ライブラリを見つけましたが、ご想像のとおり、時間がかかるため、メイン UI で実行できないため、AsyncTask を使用してバックグラウンド スレッドで重い作業を行うことにしました。 、そして吐き始めただけで、終了したメッセージとすべてがうまくいくでしょう。しかし、ここで2つの大きな問題があります。ボタンを押すと、ファイルが解凍されますが、アプリがロックされ、anr画面が表示されるため、バックグラウンドスレッドではなくメインUIで実行されているように見えます。新しいスレッドは ddms ビューを使用して表示されますが、何も表示されません。待ちたいと伝えると、ファイルが解凍されます。しかし、もちろん、プログラムがフリーズしたり、私に不安を感じさせたりしたくありません。他の問題は、クリックされた直後と、aysc タスクが終了したときにボタンのテキストを更新するように設定していることです。どちらの変更も見られないので、テキストを変更して、すべての場所が異なるようにしました。また、ステータス メッセージにテキスト フィールドを設定することになっています。onPostExecute が呼び出されることはないと思います。誰かがここで何が起こっているのか教えてもらえますか?
package net.pawworks.sandbox.svc;
import java.io.File;
import net.pawworks.utils.mainlib.filetools;
import net.pawworks.utils.mainlib.zipper;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestserviceActivity extends Activity {
/** Called when the activity is first created. */
String readpath= filetools.sdcardpath()+"/ziptestin/";
TextView readstatus;
Button readbut;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ziptest);
File setup = new File(filetools.sdcardpath()+"/ziptestout");
setup.mkdir();
setup = new File(filetools.sdcardpath()+"/ziptestin/");
setup.mkdir();
readstatus = (TextView)findViewById(R.id.readstatus);
readbut = (Button)findViewById(R.id.readit);
readbut.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
readbut.setText("Loading.....");
String status="";
// TODO Auto-generated method stub
File setup = new File(readpath+"jpgs.zip");
if(setup.canRead())
{
status="File Readable\n";
new unpackit().doInBackground(new String[]{"jpgs.zip",status} );
readbut.setText("Read!");
}
else {status = "File not Readable:"+setup.toString();readstatus.setText(status);readbut.setText("Read.");}
}
});
}
private class unpackit extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params)
{
// TODO Auto-generated method stub
Log.e("asynctask", "1:"+params[0]+"2:"+params[1]);
zipper d = new zipper(readpath+"jpgs.zip",filetools.sdcardpath()+"/ziptestout/");
d.unzip();
return params[1]+"\n"+d.status();
}
@Override
protected void onPostExecute(String result)
{
readstatus.setText(result);
readbut.setText("Read?");
}
}
}