来自异步任务的上下文和回调

时间:2015-06-22 09:52:24

标签: android android-fragments asynchronous

我在某些设备上遇到过这个问题,特别是三星。

我的活动有7 fragments。在大多数情况下,我开始async任务来获取一些数据。我通过在o nCreateView()中创建处理程序来处理异常。

 handler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {
                if (msg.what == 0) {
                    Toast.makeText(getActivity().getApplicationContext(), getActivity().getResources().getString(R.string.connection_timed_out), Toast.LENGTH_SHORT).show();
                    return true;
                }
                return false;
            }
        });

进行API调用时,在catch块中,如果发生异常,我取消async任务,并在onCancelled()回调中通知处理程序。< / p>

new AsyncTask<Void, Void, ArrayList<UserProfile>>() {
            @Override
            protected ArrayList<UserProfile> doInBackground(Void... params) {
                try {
          return new APIService().GetUserProfiles(EnloopApplication.getCurrent().getAuthenticationToken(), thisUserProfile.getEnloop_friends());
            } catch (WampNetworkException e) {
                cancel(true);
                e.printStackTrace();
            } catch (WampApiException e) {
                e.printStackTrace();
            } catch (SocketTimeoutException e) {
                cancel(true);
            }
            return null;
        }

        @Override
        protected void onCancelled() {
            super.onCancelled();
            handler.sendEmptyMessage(0);
        }

在大多数设备上,它都有效,但在Samsung设备上,有时我会null pointer exception getActivity(),因为activity没有返回任何内容,好像fragments已被销毁,再也没有被创建。问题是代码中的活动没有被破坏,因为只有正在发生的事情是在同一activity <form:option value=''>之间切换。

1 个答案:

答案 0 :(得分:1)

getActivity()返回null是一个完全有效的方案,您也应该期待。

这是因为在您的Handler中创建了匿名onCreateView,您引用了Fragment Activity已经与getActivity()分离(因此null返回AsyncTask)。您的Fragment也是如此 - 如果您在Fragment内创建匿名类,那么它也会引用相同的分离LoaderManager

我建议你修改你的架构。怎么样?我相信,您的UI组件不应该自己执行异步操作。相反,您应该使用任何类型的发布/订阅机制(有些解决方案使用HandlerThreadPerilCode B C BI EQ 179166451986 27296144046 9067728654 WS 182394050346 28745459712 9148728654 SL 114374574342 12703142574 293860386 TC 182394050346 28745459712 9148728654 WF 182394050346 28745459712 9148728654 FF 182394050346 28745459712 9148728654 ST 182394050346 28745459712 9148728654 ,RxJava,RoboSpice和其他第三方库。)