作者yauhh (哟)
看板AndroidDev
标题Re: [问题] service维持运作
时间Fri Apr 20 13:53:53 2012
※ 引述《yauhh (哟)》之铭言:
: OS版本: 2.1
: 各位好, 最近我练习service保持背景执行,由於对service运作情况没有信心,
: 所以做一份简单的外部架构来测试,包含一个Activity负责启动Service,以及
: 一个Service.
: 我把WakeLock的设定放在Service的onStartCommand,设定为PARTIAL_WAKE_LOCK.
: 刚开始观察,service有执行一阵子,按电源钮关掉萤幕也还会运作一阵子.
: 但是离开去忙一阵子之後回来看,发现service已经被系统请出去了.
: 请问程式这样的运作情况对吗? 可以相信service能够如实掌握该运作的工作吗?
: 程式片段如下:
: ........................... extends Service {
: private static PowerManager.WakeLock wakeLock = null;
: @Override
: public int onStartCommand(Intent intent, int flags, int startId) {
: HelloWorldService.acquireLock(HelloWorldService.this);
: return super.onStartCommand(intent, flags, startId);
: }
: @Override
: public IBinder onBind(Intent intent) {
: return null;
: }
: public static synchronized void acquireLock(Context context) {
: if (wakeLock == null) {
: PowerManager powerMan =
: (PowerManager)context.getSystemService(
: Context.POWER_SERVICE);
: wakeLock = powerMan.newWakeLock(
: PowerManager.PARTIAL_WAKE_LOCK,
: "idv.world.hello");
: wakeLock.setReferenceCounted(true);
: }
: wakeLock.acquire();
: }
下个问题:我有application which starts
a service while the app starts.
Somehow I started the app again for
successive tasks, then the srervice was
created again and the previous large task was lost.
Need the service be to detect the previous running
instance of it before creating?
And how to make it feasible? Thank you.
前段用手机发的,再补充主要的资讯:
目前我的软体专案的状态是搭着application把service放出去 (也就是从manifest
定义service,一开app就跟着有service)
Service让activity bindService把task送上去,而当service接到task时再放
AsyncTask出去执行task. 当service把AsyncTask送出去时,会先PARTIAL_WAKE_LOCK,
送完之後会解lock. 放出去的工作在执行之前也会放lock,工作完之後也会解lock.
在这个部份lock都是使用service的context.
我猜想,service放出去久了之後会被请出去,原因可能是,当我有一批数十个task
送上去时,数十个bindService的时候比较不会被系统请出去,但是,binding完了
并且关掉app好一阵子之後, 再重新启动app,会认为要把service重新启动.
一旦重新启动service,之前service放出去的threads一起解除.
--
posted from android bbs reader on my motorola MB525
https://market.android.com/details?id=com.bbs.reader
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 49.214.119.197
1F:推 LaPass:我之前会去检查,有的执行中的话就用连接的,没的话就创建 04/20 14:01
2F:→ LaPass:,搞不好有比较好的方法也说不定.... 04/20 14:01
3F:→ LaPass:在连结service时选一下 flag,那边有几种flag可以用 04/20 14:02
※ 编辑: yauhh 来自: 59.112.228.249 (04/20 21:59)