恢复活动时获取服务结果

时间:2014-05-19 14:05:42

标签: android android-asynctask android-service android-dialogfragment

我有一个使用片段进行布局的活动。当用户点击我通过互联网发送文件的按钮时,这对于Async来说太重了,它会崩溃我的应用程序,因为我需要在完成执行时关闭对话框片段。服务可以做到这一点?我需要使用该服务来处理文件,并发回消息告诉我已经完成的活动,或者如果用户的手机睡了或者他们点击了他们的主页按钮,我需要获得是否服务当我进入onResume活动时完成。这可能吗?

2 个答案:

答案 0 :(得分:0)

创建私有类,然后在OnClick函数中执行此操作:

new SendPictoServerextends().execute();

SendPictoServerextends:

private class SendPictoServerextends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        try {
                        //code to send data to the server

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e);
        }



        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        System.out.println("Mission is done "  );

    }

}

答案 1 :(得分:0)

服务可以解决这个问题。您需要一个活页夹或广播接收器才能与您的活动进行通信。在我看来,这可能会有点复杂,因为你需要一种方法来缓存结果,直到你的Activity从后台返回/重新创建。

您可以查看RoboSpice这是一个旨在帮助使用服务解决此问题的库。

Android服务的另一种解决方案是创建自己的经理来处理这个问题。管理器与Activity生命周期是分开的,应该是一个单例(虽然它不一定必须是),它可以在后台线程中处理并存储结果。在您的片段中,onResume向您的经理注册为监听器,以便在操作完成时接收结果。 Fragment在onPause中未注册,以避免上下文泄漏。因为管理器存储结果,所以它可以保留结果,直到Fragment恢复然后交付它。

滚动你自己的“经理”类型课程对你来说将是一些额外的努力,但如果你不想因为某种原因大量使用第三方库,这可能是值得的。