解决办法:manifests的所有activity声明,增加configChanges如前文所述。
startForegroundService 在系统创建服务后,应用有五秒的时间来调用该服务的 startForeground() 方法以显示新服务的用户可见通知。...如果应用在此时间限制内未调用 startForeground(),则系统将停止服务并声明此应用为 ANR。...private static final String TAG = MusicPlayerService.class.getSimpleName(); @Override public void onCreate...() { super.onCreate(); Log.d(TAG, "onCreate()"); } @Override public int onStartCommand...public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand()");
onCreate() 服务第一次建立的时候会调用这个方法,执行一次性设置程序,在上面2个方法执行前调用。如果服务已存在,则不执行该方法。...根据onStartCommand()的返回值设置,服务被杀掉后仍然可以在资源充足的条件下立即重启。...只要在服务中实现两个回调方法:onStartCommand()允许组件开启服务,onBind()允许绑定。 不论应用程序是怎么起服务的,任何应用程序都可以用这个服务。...启动服务 startService()->onCreate()->onStartCommand()->running->stopService()/stopSelf()->onDestroy()->stopped...,其中,服务未运行时会调用一次onCreate(),运行时不会调用。
-->onStartCommand--->onDestroy,当我多次调用startService时,如果服务已经被创建则只会调用onStartCommand方法,若未创建则去调用onCreate。。。.../com.example.yong.myfirstdemo I/tag﹕ 调用的方法是->>onStartCommand---com.example.yong.myfirstdemo.MyService...如果想要在访问者未 结束时就结束服务,需要调用unbindService方法。...-->onBind-->onUnbind-->onDestroy,在服务创建后,我调用多次bindService方法,不会再去调用onCreate 和onBind方法。。... 但是如果未调用bindService方法,就 调用unbindService方法,则会出现以下异常: <span style="font-size:14px
() { Log.i(TAG, "onCreate()"); super.onCreate(); } @Override public int onStartCommand...() { Log.i(TAG, "onCreate()") super.onCreate() } override fun onStartCommand(intent...运行项目4.1 点击运行项目:4.2 点击“start”按钮,启动Service,查看日志:可以看到点击启动按钮后,MyService被启动,onCreate()、onStartCommand() 函数被调用...onStartCommand() 函数,而onCreate()不再被调用到。...Service只在第一次创建启动的时候调用onCreate()函数,只要该Service还在运行,就不会再次触发onCreate()函数;onStartCommand()函数则在每次启动Service的时候都会调用
首次启动的话,服务会走onCreate和onStartCommand方法。 初始化性质的代码,放在onCreate里。...非绑定模式:当第一次调用 startService 的时候执行的方法依次为 onCreate()、onStartCommand(),当 Service 关闭的时候调用 onDestory 方 法。...我们在开发的过程中还 必须注意 Service 实例只会有一个,也就是说如果当前要启动的 Service 已经存 在了那么就不会再次创建该 Service 当然也不会调用 onCreate()方法。...在 onStartCommand 里面调用 startForeground()方法把Service提升为前台进程级别,然后再onDestroy里面要记得调用stopForeground ()方法。...如上图开始18:01:12>18:01:42长达30S,正常运行未产生ANR。 IntentService还有个好处就是 「用完即走」。
因此onCreate() 和onDestory()方法只会调用一次,而onStartCommand方法可以调用很多次。...执行startService时,Service会经历onCreate->onStartCommand。 当执行stopService时,直接调用onDestroy方法。...多次调用startService,该Service只能被创建一次,即该Service的onCreate方法只会被调用一次。...但是每次调用startService,onStartCommand方法都会被调用。Service的onStart方法在API 5时被废弃,替代它的是onStartCommand方法。...第一次执行bindService时,onCreate和onBind方法会被调用,但是多次执行bindService时,onCreate和onBind方法并不会被多次调用,即并不会多次创建服务和绑定服务。
(intent, flags, startId); } } 服务生命周期:context.startService() ->onCreate()- >onStart()- >onStartCommand...()->Service running ->context.stopService() ->onDestroy() ->Service stop 如果Service还没有运行,则android先调用onCreate...()然后调用onStartCommand(),每次调用startService(Intent)的时候,都会调用执行onStartCommand(); 如果Service已经运行,则只调用onStartCommand...随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。...如果service没被创建,那么调用一次onCreate(),然后调用onBind(),多次绑定时,不会多次调用onBind()。
返回值true表示希望以后再绑定时能够调用onRebind方法,false表示再绑定时不调用onRebind方法 最简单的服务启动顺序:onCreate->onStartCommand 最简单的服务退出顺序...:onDestroy Service的生命周期流程 单独启停服务 启动服务,方法调用顺序为:onCreate->onStartCommand。...日志如下: 01-06 17:25:47.097: D/FirstService(1604): onStartCommand 单独绑定服务 直接绑定服务,方法调用顺序为:onCreate->...:onCreate->onStartCommand。...onStartCommand方法,不调用onStart方法。
() 解绑服务 5个自动调用的方法 内部自动调用的方法 作用 onCreate() 创建服务 onStartCommand() 开始服务 onDestroy() 销毁服务 onBind() 绑定服务...() 1.如果service没被创建过,调用startService()后会执行onCreate()和onStartCommand()方法;2.如果service已处于运行中,调用startService...()不会执行onCreate()方法,只执行onStartCommand()方法。...也就是说,onCreate()只会在第一次创建service时候调用,多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作。...onStartCommand() 如果多次执行了Context的startService()方法,那么Service的onStartCommand()方法也会相应的多次调用。
(在调用 onStartCommand() 或 onBind() 之前)。...该方法只被调用一次 */ @Override public void onCreate() { System.out.println("服务创建:onCreate...* START_FLAG_RETRY 该flag代表当onStartCommand调用后一直没有返回值时,会尝试重新去调用onStartCommand()。...不同实例,不调用销毁服务方法,只调用start,结果如下: service未创建。...虽然定义了两个实例,但onCreate没有被重复调用,即,同一类型的service,只有显示调用了stopService才会销毁 拓展知识(进程和声明周期) Android操作系统尝试尽可能长时间的保持应用的进程
onCreate() 服务第一次建立的时候会调用这个方法,执行一次性设置程序,在上面2个方法执行前调用。如果服务已存在,则不执行该方法。 onDestroy() 服务不再使用则使用该方法。...START_STICKY 系统重新创建服务并且调用onStartCommand()方法,但并不会传递最后一次传递的intent,只是传递一个空的intent。...启动的服务: startService()->onCreate()->onStartCommand()->running->stopService()/stopSelf()->onDestroy()...->stopped 其中,服务未运行时会调用一次onCreate(),运行时不调用。...(),终止于onDestory() 服务的开关过程,只有onStartCommand()可多次调用,其他在一个生命周期只调用一次。
public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.i("MyService...", "onCreate------------"); } @Override @Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand... public void onCreate() { // TODO Auto-generated method stub super.onCreate(); ..."); } @Override @Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand也调用了OnStart...(Onstart) 当我接着按启动服务时: 可以看到当服务再次启动后,再次启动服务,会只调用OnStartCommand函数的 接着销毁服务: 可以看到服务销毁了,同时我们的线程任务也停止了。
onCreate()方法: @Override public void onCreate() { // TODO: It would be nice to have an option to hold...当实例化了一个IntentService后,后走onCreate()、onStart(),当用Intent开启一个Service时,会调用onStartCommand()。...onStartCommand()方法: @Override public int onStartCommand(@Nullable Intent intent, int flags, int startId...START_REDELIVER_INTENT : START_NOT_STICKY; } Service类从这里接收到Intent对象,然后调用onStart()方法,就执行到了onHandleIntent...()方法,创建 HandlerThread对象,创建在子线程中执行的ServiceHandler,调用了startService(intent)则会执行到onStartCommand()方法,再调用onStart
安卓中服务的开启方式 一:採用start的方式开启服务 调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy...二:採用bind的方式开发服务 调用函数:bindService(Intent…)->onCreate()->onBind()->onUnBind()->onDestroy(); 特点:绑定不会调用...onStart()[过时了]和onStartCommand()方法。...() { System.out.println("onCreate"); super.onCreate(); } @Override public...int onStartCommand(Intent intent, int flags, int startId) { System.out.println("onstartCommand
生命周期 Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了...如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。...如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。 2....运行时可以发现第一次startService时,会调用onCreate和onStart,在没有stopService前,无论点击多少次startService,都只会调用onStart。...而stopService时调用onDestroy。再次点击stopService,会发现不会进入service的生命周期的,即不会再调用onCreate,onStart和onDestroy。
不同的启动方式他们的生命周期是不一样. */ 通过startService()这种方式启动的service,生命周期是这样: 调用startService() → onCreate()→ onStartCommand...()→ onDestroy() 这种方式启动的话,需要注意一下几个问题,第一:当我们通过startService被调用以后,多次在调用startService(),onCreate()方法也只会被调用一次...如果服务已在运行,则不会调用此方法,该方法只调用一次。 onStartCommand():当另一个组件通过调用startService()请求启动服务时,系统将调用此方法。...使用 start 方式启动的生命周期:onCreate() – > onStartCommand() – > onDestory() 注意: 如果服务已经开启,不会重复回调 onCreate() 方法...,如果再次调用 context.startService() 方法,service 而是会调用onStart() 或者 onStartCommand() 方法。
() { Log.i("myIntentService", "onCreate"); super.onCreate(); } /** * 复写onStartCommand...@Override public void onCreate() { super.onCreate(); // 1....public int onStartCommand(Intent intent, int flags, int startId) { // 调用onStart()->>分析1 onStart...()只会调用一次 = 只会创建1个工作线程; 当多次调用 startService(Intent)时(即 onStartCommand()也会调用多次),其实不会创建新的工作线程,只是把消息加入消息队列中...() ->> onBind() ->> onunbind()->> onDestory() 即,并不会调用onStart() 或 onStartcommand(),故不会将消息发送到消息队列,那么onHandleIntent
() { Log.i("myIntentService", "onCreate"); super.onCreate(); } /*复写onStartCommand...问题1:IntentService如何单独开启一个新的工作线程 // IntentService源码中的 onCreate() 方法 @Override public void onCreate()...由于onCreate() 方法只会调用一次,所以只会创建一个工作线程; 2....当多次调用 startService(Intent) 时(onStartCommand也会调用多次)其实并不会创建新的工作线程,只是把消息加入消息队列中等待执行,所以,多次启动 IntentService...() —>onBind()—>onunbind()—>onDestory() 并不会调用onstart()或者onstartcommand()方法,所以不会将消息发送到消息队列,那么onHandleIntent
Intent intent) { Log.i(TAG, "onBind"); return null; } @Override//当服务第一次启动的时候调用...(); } @Override//当服务销毁的时候调用 public void onDestroy() { unregisterReceiver(receiver...(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand"); return super.onStartCommand...); startService(new Intent(this, ScreenService.class)); } } onCreate==>onStartCommand 其中...onCreate只会执行1次每次启动都会执行onStartCommand 本文由张风捷特烈原创,转载请注明 更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94
领取专属 10元无门槛券
手把手带您无忧上云