线程结束后Android关闭活动

时间:2013-08-08 01:24:13

标签: android multithreading

我有一个活动,还有一个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()来关闭我的活动? 谢谢

4 个答案:

答案 0 :(得分:3)

您可以从UI线程中的任何位置调用finish()。您可以使用AysncTaskonPostExecute {替换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),活动在新线程中启动。

我为什么工作太惊讶了。)