FB wo man anrufen addChildEventListener, so dass ich Bandbreite sparen?
Meiner test-android-app, die ich bin versucht zu berechnen, wie viel Bandbreite es wird, wenn meine Benutzer hinzufügen ein Kind jede 10sec oder 1min und synchronisiert sich mit 5 Geräten.
Meine app-Benutzer erstellen, werden Daten, die jede minute, so habe ich zu berechnen, Abo-Kosten für jeden Nutzer pro Monat. Ungefähre Bandbreite verbraucht, indem Sie jeden Benutzer pro Monat.
Rufe ich addChildEventListener in meiner MainActivity und hinzufügen Kind von einem BroadcastReceiver-Klasse, alle 10sec.
-
Jedes mal wenn ich die app starten Sie den Download aller Zeilen, was bedeutet, verbrauchen Bandbreite.
-
Wie kann ich reduzieren die Bandbreitennutzung und damit app abrufen, die nur die neu hinzugefügten child-jedes mal, wenn ich die app starten?
-
Wenn ich FB.getDefaultConfig().setPersistenceEnabled(true); und user online noch addChildEventListener herunterladen alle Daten vom server heruntergeladen oder lokal synchronisierten Daten?
Dies ist, was ich versuche.
MainActivity.java
public class MainActivity extends AppCompatActivity {
Button start, stop;
TextView status;
String url = "https://<my-app>.firebaseio.com/data";
Firebase mFirebaseRef;
AlarmManager alarmManager;
PendingIntent pendingIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Firebase.setAndroidContext(this);
mFirebaseRef.getDefaultConfig().setPersistenceEnabled(true);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
start = (Button) findViewById(R.id.Start);
stop = (Button) findViewById(R.id.stop);
status = (TextView) findViewById(R.id.serviceText);
mFirebaseRef = new Firebase(url);
mFirebaseRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d("Data onChildAdded", dataSnapshot.getValue().toString());
//Toast.makeText(getBaseContext(), "data=" + dataSnapshot.getValue(), Toast.LENGTH_LONG).show();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Log.d("Data onChildChanged", dataSnapshot.getValue().toString());
//Toast.makeText(getBaseContext(), "data=" + dataSnapshot.getValue(), Toast.LENGTH_LONG).show();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.d("Data onChildRemoved", dataSnapshot.getValue().toString());
//Toast.makeText(getBaseContext(), "data=" + dataSnapshot.getValue(), Toast.LENGTH_LONG).show();
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.d("Data onChildMoved", dataSnapshot.getValue().toString());
//Toast.makeText(getBaseContext(), "data=" + dataSnapshot.getValue(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
status.setText("Started..");
Intent myIntent = new Intent(getApplicationContext(), MyServiceReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10000,
pendingIntent);
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
status.setText("Stopped");
AlarmManager alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), MyServiceReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
alarmManager.cancel(pendingIntent);
}
});
}
@Override
protected void onStop() {
super.onStop();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Handle action bar item clicks here. The action bar will
//automatically handle clicks on the Home/Up button, so long
//as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
BroadcastReceiver.java
public class MyServiceReceiver extends BroadcastReceiver {
Firebase mFirebaseRef;
Firebase mFirebaseRef2;
String url = "https://<my-app>.firebaseio.com/data";
Context context=null;
String data = "With Firebase queries, we can selectively retrieve data based on various factors. To construct a query, you start by specifying how you want your data to be ordered using one of the ordering functions: orderByChild(), orderByKey(), orderByValue(), or orderByPriority()";
@Override
public void onReceive(final Context context, Intent intent) {
this.context = context;
Firebase.setAndroidContext(context);
mFirebaseRef = new Firebase(url);
Firebase ref = mFirebaseRef.child(System.currentTimeMillis()+"");
ref.setValue(new RecordingModel("Meeting","https://www.stadd.com",data));
Log.d("caught", "data saved");
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie kann ich ... Hole nur neu hinzugefügten child-jedes mal, wenn ich die app starten?
Können Sie FB Abfragen einschränken der Datenmenge, die heruntergeladen wird, die von einem listener. Also statt der Befestigung
ChildEventListener
direkt an eine FB-Speicherort, die Sie speichern die Schlüssel für das Letzte Kind, das du bekommen hast irgendwo (z.B. SharedPreferences) und laden Sie dann nur von dem Kind ab, das nächste mal.Dies ist ein schneller Weg, um zu überwachen, der Schlüssel zu dem letzten Punkt:
Mit diesem wissen können Sie beginnen, auf den Artikel, den Sie zuletzt gesehen haben, wenn die app neu gestartet:
Mit diesem Ansatz haben Sie zu verwalten, Ihre eigenen client-Seite-Zustand, da Sie im wesentlichen Ersatz FB für die client-side caching - /Synchronisations-Strategie mit Ihren eigenen.