android - 从哪里开始服务中的线程?
问题描述
根据 android 文档,应该使用服务执行长时间运行的任务,并且服务应该在单独的线程中。我有以下问题?注意:我使用的是普通服务而不是意图服务。1 默认情况下,服务在主线程中运行,我需要创建线程来执行我长时间运行的任务onCreate,onStartCommand?2 在绑定服务的情况下,我需要创建线程来执行我的长时间运行的任务 onCreate,onBind?
解决方案
用这个
public class NetworkService extends Service {
private HandlerThread mHandlerThread;
private Handler mHandler;
private final IBinder mBinder = new MyLocalBinder();
@Override
public void onCreate() {
super.onCreate();
mHandlerThread = new HandlerThread("LocalServiceThread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
}
public void postRunnable(Runnable runnable) {
mHandler.post(runnable);
}
public class MyLocalBinder extends Binder {
public NetworkService getService() {
return NetworkService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
推荐阅读
- android - 通过 YoutubeDataApi 将我的私人 youtube 视频分享给我的应用程序用户。或将我的私人 Youtube 视频添加到 Android 应用程序
- ios - 如何将可选项解包到变量中,然后在 while 循环的下一次迭代中使用该变量?
- python - 如何从 Flask Rest API 在后台运行长时间运行的 python 脚本?
- http - 如何将所有传入的http请求重定向到nginx配置文件中的特定url?
- php - AWS S3 PHP 客户端 ListParts 返回 null
- android - 自动登录,按预期自动登录,但从数据库获取信息时应用程序崩溃
- javascript - 如何将所有属性双引号更改为单引号?
- python - 在 ubuntu 中运行第一个 cgi-python,对于一个 hello world 程序,它返回“404 错误
- junit - 当我创建如下对象时如何模拟
- python-3.x - 如何清除打印行并将其替换为更新的变量 IDLE