我有一个活动,还有一个buttonClick,我调用一个将一些JSON发送到PHP文件的Thread。我想让活动在线程结束后关闭。我怎么能这样做?
这是我的点击事件:
Button bsave = (Button) findViewById(R.id.button3);
View.OnClickListener eventHandlerx = new View.OnClickListener() {
@Override
public void onClick(View arg0) {
sendJson( urlx, jsonarray);
}
...
这是我的主题:
private void sendJson(final String urlx, final JSONArray jsonarray) {
Thread t = new Thread() {
public void run() {
Looper.prepare();
...}
...}
}
在哪里可以调用finish()来关闭我的活动? 谢谢
答案 0 :(得分:3)
您可以从UI线程中的任何位置调用finish()
。您可以使用AysncTask
的onPostExecute
{替换Thread
)或使用Runnable
开始Activity
,从UI线程中执行代码} runOnUiThread
。
答案 1 :(得分:1)
希望它会有所帮助
class SendJson extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//here you can call functionality
}
@Override
protected void onPostExecute(String result) {
//here you can call finish
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
答案 2 :(得分:0)
以下是使用Handler的示例,因为您只想关闭活动:
new Handler().post(new Runnable() {
@Override
public void run() {
//do your stuff here
MyActivity.this.finish();
}
});
但正如@dst所提到的,你应该尽可能使用AsyncTask
。
答案 3 :(得分:0)
我做了测试 - 你可以从非ui线程启动活动 - 你可以从非ui线程
完成Activity查看ACRA项目 - 很好的异常处理。在第251行的ReportExecutor中(https://github.com/ACRA/acra/blob/master/src/main/java/org/acra/builder/ReportExecutor.java#L251),活动在新线程中启动。
我为什么工作太惊讶了。)