看板 AndroidDev 關於我們 聯絡資訊
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