作者changyuheng (张昱珩)
看板AndroidDev
标题Re: [问题] service与binder
时间Wed Jun 26 23:37:44 2013
http://developer.android.com/reference/android/app/IntentService.html
Activity 一但被丢到背景就随时可以被杀掉,
所以在里面开 thread 只能解决不会影响到 UI 的问题,
不能确保事情一定做完。
IntentService 是被设计成专门用来确保事情被完成的 Service:
把他叫起来,事情丢给他,他就会做,一定会做完,做完後自己会把自己关掉。
所以适合的话,可以使用他,不需要自己管理 Service。
Binder 的使用时机就是需要 IPC 的时候。
虽然同一包 APK 里的 Service 和 Activity 八成是同一个 process,
不过因为没有新的名词,我们就先抽象一点,都当作 IPC,
总之有需要 IPC 的时候才会用到 Binder,
而这也是 Binder 被开发出来的原因。
※ 引述《giginme (钓鱼帐号)》之铭言:
: 最近程式需要背景执行
: 然後上网搜寻了关於Service的用法
: 网路上范例我也试过
: Service.class 程式如下
: public class Nickyservice extends Service{
: private Handler handler = new Handler();
: @Override
: public IBinder onBind(Intent intent){
: return null;
: }
: @Override
: public void onCreate(){
: super.onCreate();
: }
: @Override
: public void onStart(Intent intent,int startId){
: handler.postDelayed((Runnable) intent, startId);
: }
: @Override
: public void onDestroy(){
: handler.removeCallbacks(showTime);
: super.onDestroy();
: }
: public Runnable showTime=new Runnable(){
: public void run(){
: Log.i("Time:",new Date().toString());
: handler.postDelayed(this, 1000);
: }
: };
: }
: MainActivity.java 部分呼叫service则是写
: serviceButton=(ToggleButton) findViewById(R.id.serviceButton);
: serviceButton.setOnCheckedChangeListener(new OnCheckedChangeListener(){
: @Override
: public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
: if(isChecked){
: Intent intent=new Intent(MainActivity.this,Nickyservice.class);
: startService(intent);
: }else{
: Intent intent=new Intent(MainActivity.this,Nickyservice.class);
: stopService(intent);
: }
: }
: });
: AndroidMenifast也加上了
: <service android:name="Nickyservice"
: android:label="@string/app_name">
: </service>
: 成是在执行中的时候按下ToggleButton却直接当机跳出程式
: 在网路上面看到有人说要指定IBinder去绑定功能,但是在我的范例成是上面
: public void onBind()却是return null;
: 请问板上前辈binder的适用时机以及为什麽我的程式没办法顺利进入背景执行
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.37.227.69