At the beginning of the AudioFlinger class, the friend class BinderService <AudioFlinger> was defined. Why do we need to define this? There is a watch later // for AudioFlinger () the original binderservice is initialized with new AudioFlinger, while the audioflinger constructor is private, you can use the private method of the current class to set the constructor to private. I think 1 is a good method for implementing the singleton. The constructor is private, therefore, the object cannot be constructed, and this object cannot be used on the stack. The class must provide the static method to enable the external to obtain this object, very similar to singleton Mode 2, new interfaces can be added to the constructor and destructor to ensure that so many other operations are completed before and after the class is initialized. In this way, we can use service: getInstance () to construct this function in the binder SERVICE. Of course, we need to add a new interface.