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