Android组件实例化问题
对于Application、 Activity、 Notification、 BroadCast、 Service 这些组件的使用,对象的实例化问题各有不同,如何实例化以及在什么时候实例化也所有不同。
一、如何实例化
【应用程序】Application:回调OnCreate()方法实例化
【活动】Activity:回调【生命周期】实例化
【通知】Notification:需要实例化【关键字new】
【广播】BroadCast:【系统自动实例化】在Androidmainfest.xml中注册即可,获取不了广播对象。【手动实例化】new关键字,用java代码程序注册,但是最后必须程序注销
【服务】Service:【系统自动实例化】为开始服务,获取不了服务对象。【手动实例化】在Androidmainfest.xml注册,为绑定服务,可以获取服务对象,通过服务链接对象,链接成功后,可获取服务类的内部类对象,该内部类继承自IBinder,内部类用于获取服务类对象。【代理模式】
二、在什么时候实例化
【应用程序】Application:项目启动的时候实例化结束
【活动】Activity:活动界面出现的时候实例化结束
【通知】Notification:只有手动实例化,通过关键字new,但是该对象不可使用,需要通知服务管理NotificationManager对象notifity()方法发出通知,同时带一个ID
【广播】BroadCast:【手动实例化】new关键字实例化结束,但是该对象不可使用,只有使用registerReceiver()方法注册该广播的时候对象才可使用,而广播只有上下文可才能注册,发送广播可由上下文和PendIntent发送。【自动实例化】项目启动结束实例化,广播对象可使用
【服务】Service: 【手动实例化】项目启动没有实例化,在第一次context.bindService()才实例化,同时实例化的服务对象采用代理模式获取,以后再次调用该方法绑定服务都不会再次实例化,而每次绑定服务都只会执行一次onBind()周期,最后一个活动解绑会执行unBind()周期,服务结束。【自动实例化】项目启动没有实例化,在第一次context.startService()才实例化,获取不了该实例化对象,以后再次开启都不会实例化,每次开启服务都不会startCommand()周期。