代码怎样才算是运行在service中?

wow334 2020-08-23 04:48:10
public class MyService extends Service {

public static final String TAG = "MyService";

private MyBinder mBinder = new MyBinder();

public void haha() {
super.onCreate();
Log.d(TAG, "onCreate() executed");
}

@Override
public void onCreate() {
//service的普通方法
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand() executed");
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy() executed");
}

@Override
public IBinder onBind(Intent intent) {
return mBinder;
}

class MyBinder extends Binder {

public void startDownload() {
Log.d("TAG", "startDownload() executed");
// 执行具体的下载任务
}

}

}

当在Activity中获得绑定的service返回的MyBinder 实例后,如果调用MyBinder 自己的public普通方法比如tartDownload(),这算是运行在服务中吗?这和直接new 一个MyBinder实例再运行它的tartDownload()有什么区别?就因为它是通过service返回的?

如果我通过service返回的MyBinder进一步返回了service的实例,调用service的普通方法haha(), 这算是代码运行在service中吗?


怎样才算是代码运行在service中?
...全文
39841 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a953210725 2020-09-05
  • 打赏
  • 举报
回复
说几点我的理解: 1.Service和Activity同属于四大组件,他们都不应该由我们自己实例化,而是通过startActivity或者startService等由系统(主要是activityManagerService)进行实例化并管理。在不同情况下,会由系统进行调用生命周期。 2.只要service由提供启动后,我们代码放在他的任何一个生命周期内都算运行在service中,比如,onCreate,onbind以及onStartCommand等等。 3.如果你自己在activity中new一个service,然后调用他的方法,那只能算是一个activity中的普通的对象操作,失去了service的价值。 你可以类比参考更容易理解的Thead的操作。 如果你new 一个thread,直接调用 他的run,那这个线程并没有启动起来,只是一个普通对象方法调用。 而你调了start,这个线程会主动调用run,这样线程才算是真正启动了。
  • 打赏
  • 举报
回复
感觉楼主是对service不了解啊,楼上都说的很好,建议再看看service的详解
ink_s 2020-08-25
  • 打赏
  • 举报
回复
onStartCommand() 每次bindService 或者startService 都会调用一次,onCreate 只是在第一次启动的时候调用。看你需求放哪里。或者直接写一个方法,在activity中获取service实例然后调用。 https://blog.csdn.net/qq_19431333/article/details/53784734 深入理解Service(一)——服务生命周期
wow334 2020-08-24
  • 打赏
  • 举报
回复
Activity因为离开前台后容易被回收,Service在后台生存期会长很多,所以需要长时间运行的代码会放在service中运行, 这些代码放在service中的哪里,才算是运行在service中呢,放在onStartCommand() 和 onBind() 这种生命周期中运行才算吗?
ink_s 2020-08-24
  • 打赏
  • 举报
回复
你new一个service,他并没有开始运行,需要bindService 或者startService 他才能运行onCreate
键盘舞者113 2020-08-24
  • 打赏
  • 举报
回复
首先,你获取的MyBinder和Service创建的对象不是同一个,这个你可以打印证实。
第二,你获取的MyBinder是 Service创建的对象的代理对象,你调用 这个MyBinder,它然后再调用Service的创建的对象

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧