title: aSmack as a service
body: <p>Basically I have a Main class running the entire project. The code is working perfectly although once the App is unfocused it becomes inactive. I was wondering how I would go about making it a service. One that would startup at boot. </p>
  
  <p>The app will be a one way message system for notifications. I.E.</p>
  
  <p>Desktop Client -> Openfire Server -> Android XMPP Service -> Storage (DB) -> Android GUI for display</p>
  
  <p>As I've said, the Code is working (Connect, Login, Receive) but isn't a service.</p>
  
  <p>I could use the BEEM source but it's too featured and interlaced. I'm after a lightweight service.</p>
  
  <p>The code:</p>
  
  <pre><code>public class MainActivity extends Activity {
  
    public static final String HOST = "fire.example.com";
    public static final int PORT = 5222;
    public static final String SERVICE = "example.com";
    public static final String USERNAME = "metest@fire.example.com";
    public static final String PASSWORD = "mepass";
  
    private XMPPConnection connection;
    private ArrayList&lt;String&gt; messages = new ArrayList&lt;String&gt;();
    private Handler mHandler = new Handler();
    private ListView listview;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      listview = (ListView) this.findViewById(R.id.listMessages);
      setListAdapter();
  
      connect();
    }
  
    /**
     * Called by Settings dialog when a connection is establised with 
     * the XMPP server
     */
    public void setConnection(XMPPConnection connection) {
      this.connection = connection;
      if (connection != null) {
        // Add a packet listener to get messages sent to us
        PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
        connection.addPacketListener(new PacketListener() {
          @Override
          public void processPacket(Packet packet) {
            Message message = (Message) packet;
            if (message.getBody() != null) {
              String fromName = StringUtils.parseBareAddress(message.getFrom());
              Log.i("XMPPChatActivity ", " Text Recieved " + message.getBody() + " from " +  fromName);
  
              messages.add(message.getBody());
  
  
              mHandler.post(new Runnable() {
                public void run() {
                  setListAdapter();
                }
              });
            }
          }
  
  
        }, filter);
      }
    }
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
  @SuppressLint("NewApi")
  
  
    private void setListAdapter() {
      ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(this, R.layout.listitem, messages);
      listview.setAdapter(adapter);
    }
  
    @Override
    protected void onDestroy() {
      super.onDestroy();
      try {
        connection.disconnect();
      } catch (Exception e) {
  
      }
    }
  
    public void connect() {
  
      final ProgressDialog dialog = ProgressDialog.show(this, "Connecting...", "Please wait...", false);
      Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
          // Create a connection
         ConnectionConfiguration connConfig = new ConnectionConfiguration(HOST, PORT, SERVICE);
         XMPPConnection connection = new XMPPConnection(connConfig);
           try {
             connection.connect();
             Log.i("XMPPChatActivity",  "[SettingsDialog] Connected to "+connection.getHost());
           } catch (XMPPException ex) {
               Log.e("XMPPChatActivity",  "[SettingsDialog] Failed to connect to "+ connection.getHost());
               Log.e("XMPPChatActivity", ex.toString());
               setConnection(null);
           }
            try {
              connection.login(USERNAME, PASSWORD);
              Log.i("XMPPChatActivity",  "Logged in as" + connection.getUser());
  
              // Set the status to available
              Presence presence = new Presence(Presence.Type.available);
              connection.sendPacket(presence);
              setConnection(connection);
  
              Roster roster = connection.getRoster();
              Collection&lt;RosterEntry&gt; entries = roster.getEntries();
              for (RosterEntry entry : entries) {
  
                Log.d("XMPPChatActivity",  "--------------------------------------");
                Log.d("XMPPChatActivity", "RosterEntry " + entry);
                Log.d("XMPPChatActivity", "User: " + entry.getUser());
                Log.d("XMPPChatActivity", "Name: " + entry.getName());
                Log.d("XMPPChatActivity", "Status: " + entry.getStatus());
                Log.d("XMPPChatActivity", "Type: " + entry.getType());
                Presence entryPresence = roster.getPresence(entry.getUser());
  
                Log.d("XMPPChatActivity", "Presence Status: "+ entryPresence.getStatus());
                Log.d("XMPPChatActivity", "Presence Type: " + entryPresence.getType());
  
                Presence.Type type = entryPresence.getType();
                if (type == Presence.Type.available)
                  Log.d("XMPPChatActivity", "Presence AVIALABLE");
                  Log.d("XMPPChatActivity", "Presence : " + entryPresence);
                }
                } catch (XMPPException ex) {
                  Log.e("XMPPChatActivity", "Failed to log in as "+  USERNAME);
                  Log.e("XMPPChatActivity", ex.toString());
                  setConnection(null);
                }
                dialog.dismiss();
             }
        });
      t.start();
      dialog.show();
    }
  }
  </code></pre>
  
  <p>So basically, How do I make this a service</p>