У меня есть приложение со многими действиями, а «за» приложение я хочу, чтобы серверный сокет всегда работал, слушая и обслуживая данные по запросу.Получение Force Close при запуске Android-сервиса (как сокета сервера)
Итак, я создал службу, но, возможно, я не понимаю, как это работает, потому что у меня проблемы. Давайте посмотрим, мое обслуживание:
public class MyService extends Service {
private static final String TAG = "MyService";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d("STATUS", "onCreate service");
try {
// create socket
ServerSocket servsock;
servsock = new ServerSocket(50000);
Log.v("STATUS","SERVER SOCKET CREATED at="+50000);
while (true) {
Log.v("status","Waiting...");
Socket sc = servsock.accept();
Log.v("status","Accepted connection : " + sc);
ObjectOutputStream os = new ObjectOutputStream(sc.getOutputStream());
ObjectInputStream is = new ObjectInputStream(sc.getInputStream());
.........
sc.close();
}
.............
В мое приложение на первом экране появляется это окно Логин, и я хочу, чтобы служба запускалась imediatelly после входа в систему (о создании «вошли в» деятельности)
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mainActivity);
startService(new Intent(this, MyService.class));
........
Проблема в том, что когда начинается действие, я получаю Force Close над черным экраном (интересно, потому что startService после setContentView) - хотя я вижу через Logcat, что служба (и серверный сокет) была выполнена.
менеджерАктивность дает мне следующую информацию:
01-10 17: 55: 43.706: E/ActivityManager (2490): ANR в com.sapo.android.obesidade 01-10 17: 55: 43.706: E/ActivityManager (2490): Причина: Выполнение услуги ru.sapo.android.obesidade/.MyService 01-10 17: 55: 43.706: E/ActivityManager (2490): Нагрузка: 1,24/1,13/1.1 01-10 17: 55: 43.706: E/ActivityManager (2490): загрузка процессора с 43658ms до 10ms назад: 01-10 17: 55: 43.706: E/ActivityManager (2490): system_server: 6% = 3% пользователь + 3% ke rnel/faults: 7590 minor 01-10 17: 55: 43.706: E/ActivityManager (2490): .app.twlauncher: 2% = 2% пользователь + 0% ядро / ошибки: 812 minor 01-10 17:55 : 43,706: E/ActivityManager (2490):
mmcqd: 0% = 0% пользователей + 0% ядра
Таким образом, проблема, несомненно (она работает, если удалить) на некоторое время (правда) - то, что уже работал в AsyncTask в Activity (без использования Сервисов).
Что я могу сделать?
Удерживайте паузу, так что вы используете эту службу как задачу асинхронного вызова? (В другом потоке?) – ScarletAmaranth
@ScarletAmaranth, нет, я использовал (временно) серверный сокет на AsyncTask, прежде чем использовать Сервисы! Очевидно, проблема этого решения в том, что я не могу запустить сервер в фоновом режиме. – Tiago