2 hwaphon Hwaphon 于 2016.05.02 15:59 提问

在 Fragment 中调用 Service 执行下载任务,但是失败了,代码如下,请问下是为什么啊
public class JokeFragment extends Fragment implements ServiceConnection, SendCallBack {

        private RecyclerView mRecyclerView;
        private RecyclerAdapter mAdapter;
        private List<JokeData> mJokeDatas = new ArrayList<>();
        private JokeService mService;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
        }

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
                super.onActivityCreated(savedInstanceState);
                Intent intent = new Intent(getActivity().getApplicationContext(), JokeService.class);
                getActivity().getApplicationContext().bindService(intent, this, Context.BIND_AUTO_CREATE);
        }

        @Override
        public void onResume() {
                super.onResume();
                mAdapter.notifyDataSetChanged();
        }

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                View view = inflater.inflate(R.layout.fragment_joke, container, false);
                mRecyclerView = (RecyclerView) view.findViewById(R.id.fragment_recyclerview);
                mAdapter = new RecyclerAdapter(getActivity(), mJokeDatas);
                mRecyclerView.setItemAnimator(new DefaultItemAnimator());
                mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
                mRecyclerView.setHasFixedSize(true);
                mRecyclerView.setAdapter(mAdapter);
                return view;
        }

        @Override
        public void onResult(List<JokeData> datas) {
                mJokeDatas = datas;
        }

        @Override
        public void onError(String info) {
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
                mService = ((JokeService.LocalBinder) service).getService();
                if (mService!=null){
                        mService.setCallBack(this);
                        mService.Download();
                }

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
                mService = null;
        }

        @Override
        public void onPause() {
                super.onPause();
                if (mService != null) {
                        mService.setCallBack(null);
                        getActivity().getApplicationContext().unbindService(this);
                }
        }
}

1个回答

q610098308
q610098308   2016.05.02 18:37
 if (mService != null) {
                    mService.setCallBack(null);
                    getActivity().getApplicationContext().unbindService(this);
            }

                            放 在OnDestory()中试试
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Activity,Fragment,Service生命周期
额,这一篇拖了好久,自己在学习深一些的东西就把这一部分分享忘了。怎么说生命周期都是我们Android编程,可能不只是Android编程吧,很重要的东西。很值得写一下。之前想分享几篇别人写的不错的。不过想了想还是自己写一下吧。 其实不管是什么的生命周期,Acitivity也好,Fragment也好,Service也好,Google提供的开发这文档都是最好的学习工具。如果还不会使用Google官方提
关于 fragment重写onCreateOptionsMenu不执行问题
这种情况大概有三种原因导致 1、就是在fragment中重写onCreateOptionsMenu必须要调用setHasOptionsMenu(true)方法 所以你需要在create方法创建的时候设置setHasOptionsMenu(true) 2、事件被其他的方法拦截或者屏蔽了menu菜单,从而导致onCreateOptionsMenu方法不执行 所以你需要去检查自己写的方法前后没有
没有被调用的函数其代码为什么会被执行?
现象 首先我们运行下面一段代码: 从以上程序中我们可以知道,main函数调用函数fun1,函数fun1和main函数都没有调用函数fun,因此,我们认为函数fun中的"fun is run.."和 "you are done.."都不会被打印。 且main函数中的打印语句“begin run..”和“main: you should run here”都应该被打印 让我们来
【Android 开发教程】在服务中执行重复任务
除了在service中执行耗时的操作,也可能需要在service中执行重复的任务。举个例子,你想要编写一个闹钟程序,定时地在后台执行一个任务。在这种情况下,你的service就需要判断循环周期是否已经到达。可以使用Timer类去实现。1. 使用之前的Services工程,做一点修改。public class MyService extends Service { int counter =
请问下面的程序一共输出多少个“-”?
题目:int main(void) {     int i;     for (i = 0; i < 2; i++) {          fork();          printf("-");      }      return 0;  }  A、2 B、4 C、6 D、8 答案:D 解析: fork函数是计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,
SQL SERVER 维护计划执行索引失败
数据库服务器重装系统后需要重新配置维护计划
如何在非Activity中启动、绑定Service(服务)
做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法 做Android开发的都知道,启动或绑定服务的语句是startService、bindService,可是这两个方法一般都只能在Activity中使用,也就是用Activity才能“.”的出这方法
android在Fragment中启动服务
1.startService(new Intent(getActivity(),mService.class));2.getActivity().startService(new Intent(getActivity(),mService.class));3.Intent mIntent = new Intent(getActivity(), BLeService.class); getAc
IntentService 串联 按顺序执行(此次任务执行完才执行下一个任务)
IntentService与Service的最大区别就是前者依次执行,执行完当前任务才执行下一个任务,后者并发执行 在IntentService里面不写onCreate方法 MainActivity: package com.zzw.test1; import android.app.Activity; import android.content.Intent; import andro
为什么fork创建子进程后,父进程中运行过的代码在子进程中不再运行了
子进程是父进程的一个完全拷贝,如何理解?为什么fork创建子进程后,父进程中运行过的代码在子进程中不再运行了?