commit 90e10b84362864695fdb01f104833a01a465717b
parent c5166e40cab313371123a331f16c0d8e0a08c398
Author: Jan Dankert <devnull@localhost>
Date: Fri, 10 Feb 2012 22:51:30 +0100
Überflüssige Referenzen aus dem Service entfernt, um Speicherplatz zu sparen.
Diffstat:
2 files changed, 63 insertions(+), 15 deletions(-)
diff --git a/src/de/mtbnews/android/receiver/NetworkStateReceiver.java b/src/de/mtbnews/android/receiver/NetworkStateReceiver.java
@@ -7,16 +7,39 @@ import android.content.Intent;
import android.net.ConnectivityManager;
import android.util.Log;
+/**
+ * Ein Receiver für die Erkennung von Änderungen am Verbindungsstatus. Wenn die
+ * Datenverbindung unterbrochen oder wieder hergestellt wird, wird dieser
+ * Receiver informiert.
+ * <ul>
+ * <li>Wird die Datenverbindung unterbrochen, wird der Hintergrundservice
+ * gestoppt.</li>
+ * <li>Wird die Datenverbindung hergestellt, wird der Hintergrundservice
+ * gestartet.</li>
+ * </ul>
+ *
+ * @author dankert
+ *
+ */
public class NetworkStateReceiver extends BroadcastReceiver
{
+ /**
+ * {@inheritDoc}
+ *
+ * @see android.content.BroadcastReceiver#onReceive(android.content.Context,
+ * android.content.Intent)
+ */
@Override
public void onReceive(Context context, Intent intent)
{
- boolean noConnectivity = intent.getBooleanExtra(
+ // Feststellen, ob die Verbindung besteht.
+ final boolean noConnectivity = intent.getBooleanExtra(
ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
+
if (!noConnectivity)
{
+ // Datenverbindung vorhanden
Log.d("IBC", "connection established, starting service");
context.stopService(new Intent(context, SubscriptionService.class));
context
@@ -24,6 +47,7 @@ public class NetworkStateReceiver extends BroadcastReceiver
}
else
{
+ // Datenverbindung unterbrochen
Log.d("IBC", "connection lost, stopping service");
context.stopService(new Intent(context, SubscriptionService.class));
}
diff --git a/src/de/mtbnews/android/service/SubscriptionService.java b/src/de/mtbnews/android/service/SubscriptionService.java
@@ -20,7 +20,6 @@ import android.preference.PreferenceManager;
import android.text.TextUtils;
import android.util.Log;
import de.mtbnews.android.IBCActivity;
-import de.mtbnews.android.IBCApplication;
import de.mtbnews.android.MailboxActivity;
import de.mtbnews.android.R;
import de.mtbnews.android.SubscriptionForenActivity;
@@ -35,30 +34,47 @@ import de.mtbnews.android.util.IBC;
import de.mtbnews.android.util.Utils;
/**
+ * Hintergrund-Service, der ungelesene Nachrichten, Themen und Beiträge
+ * ermittelt und im Erfolgsfall eine Notification erzeugt.
+ *
* @author dankert
*
*/
public class SubscriptionService extends Service
{
- private IBCApplication ibcApp;
- private static Timer timer;
+ /**
+ * Timer, der das zeitgesteuerte Abholen von neuen Nachrichten steuert.
+ */
+ // Damit der Timer nicht nur erzeugt, sondern auch gestoppt werden kann,
+ // behalten wir hier eine Referenz.
+ private Timer timer;
+
+ /**
+ * App-Einstellungen.
+ */
+ // Notwendig für die Benutzeranmeldung.
private SharedPreferences prefs;
+ // Notification-Kategorien:
private static final int NOTIFICATION_ERROR = 1;
private static final int NOTIFICATION_TOPIC = 2;
private static final int NOTIFICATION_FORUM = 3;
private static final int NOTIFICATION_MESSAGES = 4;
- private TapatalkClient client;
-
+ /**
+ * {@inheritDoc}
+ *
+ * @see android.app.Service#onBind(android.content.Intent)
+ */
public IBinder onBind(Intent arg0)
{
+ // Dieser Service läuft stets alleine und wird nicht gebunden.
return null;
}
/**
- * Erzeugt für diese Serviceinstanz einen Timer, der in regelmäßigen
- * Abständen auf neue Themen und Nachrichten prüft.
+ * Service-Start. Erzeugt für diese Serviceinstanz einen Timer, der in
+ * regelmäßigen Abständen auf neue Themen und Nachrichten prüft.
*
* @see android.app.Service#onCreate()
*/
@@ -66,11 +82,8 @@ public class SubscriptionService extends Service
{
Log.d(IBC.TAG, "Starting service");
super.onCreate();
- ibcApp = (IBCApplication) getApplication();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
- client = ibcApp.getTapatalkClient();
-
// Intervall in Minuten (Default = 3 Stunden)
int intervalInMinutes = Integer.parseInt(prefs.getString(
"subscription_service_interval", "180"));
@@ -84,7 +97,9 @@ public class SubscriptionService extends Service
/**
* Der Timer, der auf ungelesene Nachrichten und ungelesene Themen prüft.
- * Falls gefunden, wird dies über den NotificationService gemeldet.
+ * Falls gefunden, wird dies über den NotificationService gemeldet. <em>Dies
+ * darf eine interne Klasse sein, denn solange der Timer besteht, muss auch
+ * der Service dazu laufen.</em>
*
* @author dankert
*
@@ -95,6 +110,15 @@ public class SubscriptionService extends Service
{
Log.d(IBC.TAG, "timer event fired");
+ // Für diesen Timer-Event erzeugen wir einen eigene Instanz des
+ // Tapatalk-Client. Die Laufzeit ist hier unkritisch, dafür belastet
+ // der Client nicht den HEAP, da nach dem Timeevent der
+ // Tapatalk-Client durch den GC weggeräum werden kann. Dieser
+ // Hintergrundprozess wird dadurch deutlich weniger
+ // speicherintensiv.
+ final TapatalkClient client = new TapatalkClient(
+ IBC.IBC_FORUM_CONNECTOR_URL);
+
final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
try
@@ -128,7 +152,7 @@ public class SubscriptionService extends Service
.join(", ", forumNameList), contentIntent);
nm.notify(NOTIFICATION_FORUM, notification);
}
-
+
ListHolder<Topic> subscribedTopic = client.getSubscribedTopics(
0, 10, true);
final List<String> topicNameList = new ArrayList<String>();
@@ -249,7 +273,7 @@ public class SubscriptionService extends Service
}
/**
- * Notification erzeugen
+ * Notification erzeugen.
*
* @param tickerText
* Mehrzeiliger Ticker-Text, der in der Notification-Bar
@@ -257,7 +281,7 @@ public class SubscriptionService extends Service
* @param titleResId
* Titel-Resource-Id der Notification
* @param titleExtra
- * Zusatz-Titeltext, kann <code>null</code> bleiben
+ * Zusatz-Titeltext, kann <code>null</code> sein
* @param content
* Inhaltstext der Noification
* @param intent