先日Kindleで購入したAndroid本で、気になる内容があったので整理しておきたいと思います。
単純にServiceクラスを実装して実行した時、Serviceクラス内のメソッドには通常アクセスできません。一応、static定義したメソッドならアクセスできないこともないですが、それは言語的には推奨ではないみたいで。
以下に示したのは、ActivityとしてMainActivity、ServiceとしてTestSeriveというクラスを定義したときに、最低限実装する内容を示しています。この実装を行った状態においては、Serviceクラス内に定義したメソッドにActivityからアクセスできるようになります。
以下の例では、onPause内でインスタンス経由でServiceを停止させ、その後Bindを解除するという記述になっていますが、ここのところは個々のアプリケーションの仕様に依存する部分ですので、真似なくていいと思います。よくわからなければ真似ておいていいですが、真似ると、onPauseに入るとServiceを停止させてしまうため、ずっとServiceを動かしておくアプリケーションでは困りますよね。この辺はご注意ください。
以下のコードは、Android Studioに書いたコードをコピペしているので、そのようなフォント、色分けになっています。
public class MainActivity extends Activity {    private TestService mServiceBinder;    private ServiceConnection myConnection = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder binder) {            mServiceBinder = ((TestService.MyBinder) binder).getService();        }        @Override        public void onServiceDisconnected(ComponentName name) {            mServiceBinder = null;        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    public void doBindService(){        Intent intent = new Intent(this, TestService.class);        bindService(intent, myConnection, Context.BIND_AUTO_CREATE);    }    @Override    protected void onResume(){        super.onResume();        if(mServiceBinder==null){            doBindService();        }        startService(new Intent(getApplicationContext(), TestService.class));    }    @Override    protected void onPause(){        super.onPause();        if(mServiceBinder != null){            //mServiceBinder.stopSelf();        }        unbindService(myConnection);        mServiceBinder = null;    }}public class TestService extends Service {    private static final String TAG = TestService.class.getSimpleName();  //What is this?    private final IBinder mBinder = new MyBinder();    @Override    public IBinder onBind(Intent intent) {        return mBinder;    }    public class MyBinder extends Binder {        TestService getService() {            return TestService.this;        }    }    @Override    public void onCreate(){        super.onCreate();    }    @Override    public int onStartCommand(Intent intent, int flags, int startId){        Toast.makeText(getApplicationContext(), "Service enabled", Toast.LENGTH_SHORT).show();        Log.d("DBG", "Service running OK");        return START_NOT_STICKY;    }}