1

我有一个活动和一个 buttonClick,我在其中调用了一个 Thread,它将一些 JSON 发布到 PHP 文件。我希望活动在线程结束后关闭。我怎样才能做到这一点?

这是我的点击事件:

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() 来关闭我的活动?谢谢

4

4 回答 4

3

您可以finish()从 UI 线程中的任何位置调用。您可以通过使用AysncTask's onPostExecute(将 your 替换Thread为它)或Runnable使用Activity's启动从 UI 线程中执行代码runOnUiThread

于 2013-08-08T01:32:28.997 回答
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) {
    }
}
于 2013-08-08T02:02:37.150 回答
0

这是一个使用 Handler 的示例,因为您只想关闭活动:

    new Handler().post(new Runnable() {
        @Override
        public void run() {

            //do your stuff here

            MyActivity.this.finish();
        }
    });

但正如@dst 提到的,您应该AsyncTask尽可能使用。

于 2013-08-08T01:59:10.027 回答
0

我做了测试 - 你可以从非 ui 线程 startActivity - 你可以从非 ui 线程完成 Activity

看看 ACRA 项目 - 很好的异常处理。在第 251 行(https://github.com/ACRA/acra/blob/master/src/main/java/org/acra/builder/ReportExecutor.java#L251)的 ReportExecutor 中,活动在新线程中启动。

我很惊讶为什么它会起作用:)

于 2016-02-23T09:12:43.303 回答