Вы, вероятно, уже читали некоторую документацию по сервису Android, но я предлагаю изучить ее дальше и посмотреть пример локальной службы, если вы этого еще не сделали:
http://developer.android.com/reference/android/app/Service.html
Похоже, что вы уже запустили свою Службу и работаете, и я думаю, что реальная проблема, которую вы сейчас пытаетесь решить, - это как передать данные из вашей Деятельности в вашу Службу. Когда ваша активность связана со службой, которая является частью того же приложения, эта служба находится в том же процессе и работает в том же основном потоке пользовательского интерфейса, поэтому, как только вы получите объект IBinder из службы после связывания с ним, вы можете просто напрямую вызовите функции в этой службе из вашей деятельности. Точно так же вы можете передать вашей службе объект-обработчик из вашей деятельности, чтобы служба могла отправлять сообщения или публиковать Runnables в вашу деятельность. Связь с локальным сервисом, следовательно, довольно проста.
Так что, если вы посмотрите на Образец локальной службы по ссылке выше, вы увидите раздел кода, где мы получаем ссылку на Службу после завершения привязки:
mBoundService = ((LocalService.LocalBinder)service).getService();
После этого момента можно напрямую вызывать методы той службы, которая находится в том же приложении. Например, у вас может быть метод sendFile в вашей службе. В своей деятельности вы можете сделать что-то вроде:
mBoundService.sendFile( myStuffObject );
В отношении переполнения стека существует довольно много вопросов, касающихся обмена данными между Деятельностью и Сервисом, и я думаю, что вам будет полезно поискать и прочитать их.