2013-04-10 2 views
3

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

Мои мысли до сих пор создать класс, который будет просто создать сокет и соединения:

public class connection { 
    private String HostIPaddress = "XXX.XXX.XXX.XXX"; 
    private int PORT = XXXX; 
    public Socket sock = null; 
    public DataOutputStream out = null; 
    public DataInputStream in = null; 

    public void assignStreams(){ 
     try{ 
      sock = new Socket(getHostIPaddress(),getPORT()); 
      out = new DataOutputStream(sock.getOutputStream()); 
      in = new DataInputStream(sock.getInputStream()); 
     }catch (Exception ex) { 
      Log.i("Connection Error",ex.toString()); 
     } 
     } 
    } 

, а затем от деятельности, которые работают первый, создать статический объект этого класса и все другие виды деятельности могут получить доступ этот объект .. Звучит так, что это сработает, но я желал еще нескольких мыслей или отзывов?

ответ

2

Нет, не очень хорошая идея. Пользователь может отключить Интернет в любой момент времени, и ваш класс использует сетевое соединение, когда может не понадобиться вообще. Очистка после розетки также невозможна. Откуда вы знаете, когда до close() это?

Вам просто лучше создавать их по мере необходимости. У вашего класса также плохая инкапсуляция.

public Socket sock = null; 
public DataOutputStream out = null; 
public DataInputStream in = null; 

Эти потоки могут быть переназначены в любое время. Защитите их с помощью getters() и seters().

1

Я не знаю, почему это невозможно.

Уэтер это хорошая идея или нет, я не знаю.

Мои два цента для достижения этого на вашем пути, создайте одноэлементный класс.

singleton pattern example

Кредиты статье перейти к http://www.javacoffeebreak.com/

Помимо их реализации Barebone, убедитесь, что у вас есть метод, чтобы восстановить свой сокет и так же, как важно, закрыть сокет. Что вы можете сделать, когда ваше приложение будет уничтожено. Я считаю, что метод onDestroy объекта приложения является достойным местом для этого, поскольку из того, что я помню, это будет последний метод onDestroy, который вызывается до того, как ваше приложение будет полностью выведено из памяти.

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

Обратите внимание, что если у вас есть сокет, который всегда открыт на всех этапах, легко забыть, что вам нужно его закрыть. Еще одна причина для управления сокетами за активность, а не во всем мире.