Android通知不断重现

时间:2015-08-20 22:58:15

标签: android notifications

我正在尝试使用下面显示的简单应用程序(至少相关部分)更好地处理通知。我想在应用程序未被销毁时显示通知图标,并在销毁时删除通知图标;很简单吧?

我的问题是,当片段的onDestroyView事件被触发时,通知图标确实消失了,但随后再次出现,我无法找出原因。

为了更好地解决问题,我创建了一个停止通知按钮,调用mServiceBinder的{​​{1}}方法,确实删除通知图标即使它正在调用stop()事件中调用的相同方法。

关于问题的任何想法?

MainActivityFragment

onDestroyView

TestService

package org.chrisolsen.notificationtest;

import ...

/**
 * A placeholder fragment containing a simple view.
 */
public class MainActivityFragment extends Fragment {

    private ServiceConnection mServiceConn;
    private TestService.TestBinder mServiceBinder;

    public MainActivityFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_main, container, false);
    }

    @Override
    public void onDestroyView() {
        Log.d("Fragment", "onDestroyView");

        // *try* to prevent services from restarting
        if (mServiceConn != null) {
            getActivity().unbindService(mServiceConn);
        }

        if (mServiceBinder != null) {
            mServiceBinder.stop();
        }

        mServiceConn = null;
        mServiceBinder = null;
        super.onDestroyView();
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        Log.d("Fragment", "onViewCreated");
        Button showButton = (Button) view.findViewById(R.id.button);
        Button hideButton = (Button) view.findViewById(R.id.btnHide);

        showButton.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Fragment", "onCLick");

                mServiceConn = new ServiceConnection() {

                    @Override
                    public void onServiceConnected(ComponentName name, IBinder service) {
                        Log.d("serviceConn", "onConnected");
                        mServiceBinder = (TestService.TestBinder) service;
                    }

                    @Override
                    public void onServiceDisconnected(ComponentName name) {
                        Log.d("serviceConn", "onDisconnected");
                    }
                };

                Intent service = new Intent(getActivity(), TestService.class);
                getActivity().startService(service);
                getActivity().bindService(service, mServiceConn, Context.BIND_ABOVE_CLIENT);
            }
        });

        hideButton.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                mServiceBinder.stop();
            }
        });
    }
}

2 个答案:

答案 0 :(得分:0)

通知会重新显示,因为您的服务在活动结束后调用了onStartCommand。 这是一个创建和显示通知的好地方。 onStartCommand方法可能多次调用。例如,将通知创建放在onCreate

当你写“应用程序没有被销毁”时,你是什么意思?如果您在服务运行时考虑过,请将创建内容放到onCreate并在onDestroy中将其删除。

答案 1 :(得分:0)

返回START_STICKY代替super.onStartCommand(intent, flags, startId),这是我应该做的。