2012-02-05 4 views
5

все, что мне нужно знать, так это то, что когда я могу выполнить некоторую операцию с использованием независимого потока, зачем мне нужен Service. Что такое Сервис, но нить не может? Я прошел через многие сообщения, но не смог найти удовлетворительного ответа.Разница между сервисом и потоком в Android?

ответ

11

Основным преимуществом Сервиса является доступ к объекту Context, который имеет независимый жизненный цикл. Это позволяет повторно использовать общий код во многих действиях, а в случае публичных или открытых сервисов - множество приложений.

Нить - это механизм для работы без блокировки другой работы.

Служба не подразумевает нить, и нить не подразумевает сервис. Это две разные вещи. Я склонен использовать Службы в ситуациях, когда мне нужен контекст для работы с преформой, но я хочу, чтобы код был изолирован от моих действий, чтобы улучшить повторное использование.

+0

Хорошо. Если в случае, если я передаю контекст в рабочий поток, он будет служить цели? – SAMD

+0

вы не объяснили случай или цель, поэтому мне трудно сказать вам. –

+0

На самом деле я ищу какой-то исключительный случай, когда Сервис необходимо использовать. Мне задали этот вопрос и я не мог ответить, поэтому я пытаюсь обратиться за помощью с помощью Stack Overflow. – SAMD

3

Difference between Service and Threaads

Пожалуйста, перейдите по этой ссылке, я надеюсь, что вы найдете ответ в этой ссылке.

Короче говоря, основное различие между сервисом и потоком заключается в том, что служба запускается в основном потоке (UI) и потоках рун в своем потоке. Если мы используем Service для длительных задач, это может вызвать блокировку Main UI Thread.

Для получения более подробной информации, пожалуйста, посетите данную ссылку.

29

Служба: это компонент андроида, который выполняет длительную работу в фоновом режиме, в основном с отсутствием пользовательского интерфейса.

Тема: функция уровня O.S, которая позволяет выполнять некоторую операцию в фоновом режиме.

Хотя концептуально оба вида похожи, есть некоторые важные отличия.

1.Service - если он был разрушен во время выполнения его работы, посередине Android из-за сценария с низкой памятью. Затем андроид будет убедиться, что он перезапустит вашу службу, если вы вернули START_STICKY или START_REDELIVER_INTENT из onStartCommand().

2.Thread - если он был уничтожен андроидом посередине из-за низкой памяти, тогда андроид не гарантирует перезапуск его снова. Это означает, что пользователь потерял половину работы.

3.Service - это компонент андроида, поэтому он имеет приоритетные уровни, которые необходимо учитывать при уничтожении приложения из-за низкой памяти.

4. Thread - не является компонентом android, поэтому андроид не будет учитывать приоритет потока при убийстве приложения из-за низкой памяти.

Постараюсь объяснить этот третий пункт.

Допустим, у вас есть требование подключиться к Интернету из вашей деятельности. Вы можете сделать это, используя сервис (с потоком) или напрямую, создав поток в действии. Рассмотрим второй сценарий, в котором вы подключаетесь к интернету в потоке.Затем

i. Что произойдет, если пользователь закроет действие, в то время как поток продолжается в фоновом режиме. Будет ли эта нить продолжать работать на заднем плане? Ответ. Вы не можете предсказать.

ii. Предположим, что в продолжении для вышеупомянутого сценария, даже после убийства, ваш поток продолжал выполнять намеченную операцию. Тогда в телефоне возникает ситуация с низкой памятью. Тогда это приложение станет первым восприимчивым приложением, которое будет убито, поскольку для этого приложения нет приоритета.

Итак, нижняя строка: Если вы хотите сделать какую-то тяжелую функциональность фона, всегда лучше иметь сервис с потоком. Если вы чувствуете, что эти функциональные возможности будут активны до тех пор, пока активна ваша активность, тогда перейдите для активности с потоком или активностью с помощью задачи async.

Надеюсь, это поможет.