Activity beim Start laden

T

Tobls22

Neues Mitglied
0
Hey Leute,
ich bin gerade am programmieren und möchte, dass nachdem meine hauptactivity gestartet ist, dass andere activities gestartet werden, jedoch ohne, dass ich ihr layout sehe(ich will sie also sozusagen im hinteergrund starten)

weiß jemand wie das geht?
 
Es läuft nur die Activty , die angezeigt wird. Mehrere können nicht gleichzeitig laufen. Für Hintergrundaufgaben benutzt man ein Service.
 
Was genau ist jetzt ein service und was macht er?

Oder wie kann ich es machen dass alle ectivities während des splash screen einmal geladen werden?
 
Zuletzt bearbeitet:
gar nciht kannst du nicht höchstens was du glaub ich meinst alle ressourcen etc pp .... nun es gibt noch eine Möglichkeit eine App als one Activity zu schreiben...Nachteil ist die übersicht ist schlechter zu behalten und die steigende komplexität....ansonsten bietet das nur vorteile imho
 
Zuletzt bearbeitet:
Wie schon meine Vorgänger anmerkten, gar nicht!!!!

Entweder du lädst die Activity komplett oder lässt es sein. Die Erklärung dazu findest du in der API von Google.

Activity | Android Developers

Stichwort Lifecycle.
 
Jo, hier geht hinsichtlich der Fragestellung schon einiges daneben^^
Der Link bzw den Stichpunkt, auf den markus.tullius bereits verwiesen hat, beinhaltet die wichtigsten Grundkonzepte und ist als absolutes Basis-Handwerkzeug zu verstehen - ohne wenn und aber.
Deutlich ausgedrückt: Ohne sich (wenigstens mal grob) mit der Thematik befasst zu haben, braucht man hier eigentlich keine Fragen stellen. Bitte nicht als negative Kritik verstehen - mein Beitrag ist nur als guter Rat gemeint.

Btw: man kann eine Activity auch mit einem transparenten Hintergrund laden... - diesen Vorschlag, besser nicht als Lösungsansatz verstehen -> es wird schief gehen^^
 
eig. habe ich vor sowas ähnliches zu amchen als spiel vllt wird es eine art tamagochi oder so ein mist kein plan ich möchte nur ein bisschen mit Android rumspielen...quasi wie die head dinger beim messenger von facebook....hatte zuerst auch die idee das mit transparenter activity zu amchen bin davon nvoh nivhvt völlig weg aber vllt nehme ich so wie fb den den Window manager in verbindung mit einem service so dass der hjomescreen imemr noch bedienbar ist.
 
Also, mein Problem ist dass ich zwi activities habe:

package de.tobls.steinbruchklicker;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;



public class Steinbruchsklasse extends ActionBarActivity {

//Elemente
protected TextView Textview_Steinbruch_Stein_Anzahl;
protected TextView TextView_Steinbruch_Stein_Steine_pro_Sekunde;

//Variablen
protected long Anzahl_Steine;
protected static long Klickerhöhung_Steine = 1;
protected long Steine_pro_Sekunde = 0;

//SharedPreferences
protected static SharedPreferences SteinSpeicher;
protected static SharedPreferences.Editor SteinSpeichereditor;

//Strings
protected static final String Schlüssel ="PasswortSteinSpeicher";

//Handler
protected final Handler Handler_Steine = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_steinbruch_stein);

//Initialisierung von Elementen
Textview_Steinbruch_Stein_Anzahl = (TextView) findViewById(R.id.TextView_Steinbruch_Stein_Anzahl);
Textview_Steinbruch_Stein_Anzahl.setText(Long.toString(Anzahl_Steine));
TextView_Steinbruch_Stein_Steine_pro_Sekunde = (TextView) findViewById(R.id.TextView_Steinbruch_Stein_Steine_pro_Sekunde);

//SharedPreferences
SteinSpeicher = this.getSharedPreferences("SteinSpeicherdatei", MODE_PRIVATE);
SteinSpeichereditor = SteinSpeicher.edit();
Anzahl_Steine = SteinSpeicher.getLong(Schlüssel, Anzahl_Steine);
Textview_Steinbruch_Stein_Anzahl.setText(String.valueOf(Anzahl_Steine));

//Timer
Timer Timer_Steine = new Timer();
Timer_Steine.schedule(new TimerTask() {
@Override
public void run() {UpdateGUI_Steine();}
}, 0, 1000);


}

//UpdateGUI
protected void UpdateGUI_Steine() {
Anzahl_Steine = Anzahl_Steine + Steine_pro_Sekunde;
Handler_Steine.post(Runnable_Steine);
SteinSpeichereditor.putLong(Schlüssel, Anzahl_Steine);
SteinSpeichereditor.commit();
}

//Runnable
final Runnable Runnable_Steine = new Runnable() {
public void run() {
Textview_Steinbruch_Stein_Anzahl.setText(String.valueOf(Anzahl_Steine));
TextView_Steinbruch_Stein_Steine_pro_Sekunde.setText(String.valueOf(Steine_pro_Sekunde + " Steine pro Sekunde"));
}
};

//Knöpfe
public void Knopf_Steinbruch_Stein_ZuÜbersicht (View view) {
startActivity(new Intent(Steinbruchsklasse.this, Uebersichtsklasse.class));
}

public void Fotoknopf_Steinbruch_Stein_Klicker (View view){
Anzahl_Steine = Anzahl_Steine + Klickerhöhung_Steine;
Textview_Steinbruch_Stein_Anzahl.setText(String.valueOf(Anzahl_Steine));
}

public void Fotoknopf_Steinbruch_Stein_Einstellungen (View view) {
startActivity(new Intent(Steinbruchsklasse.this, Einstellungsklasse.class));
}

}

und:
package de.tobls.steinbruchklicker;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.TextView;

public class ShopSteinbruchsklasse extends Activity {

//Variablen-Gets
protected long Klickerhöhung_Steine = Steinbruchsklasse.Klickerhöhung_Steine;

//SharedPreferences
protected SharedPreferences ShopSpeicher;
protected SharedPreferences.Editor ShopSpeichereditor;

//Strings
final String Schlüssel = "PasswortShopSpeicher";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_shop_stein);

//SharedPreferences
ShopSpeicher = this.getSharedPreferences("ShopSpeicherdatei", MODE_PRIVATE);
ShopSpeichereditor = ShopSpeicher.edit();

//Varialben-Aktualisierung
Klickerhöhung_Steine = ShopSpeicher.getLong(Schlüssel, Klickerhöhung_Steine);
Steinbruchsklasse.Klickerhöhung_Steine = Klickerhöhung_Steine;


}
public void Knopf_SteinShop_Spitzhacke (View view) {
Klickerhöhung_Steine = Klickerhöhung_Steine + 1;
Steinbruchsklasse.Klickerhöhung_Steine = Klickerhöhung_Steine;
ShopSpeichereditor.putLong(Schlüssel, Klickerhöhung_Steine);
ShopSpeichereditor.commit();
}

}

und die variable Klickerhöhung_Steine soll wenn ich die in der activity Steinbruchsklasse öffne mit der aus ShopSteinbruchsklasse aktualisiert werden, abber ich schaffe es einfach nicht

könnt ihr mir da helfen?
 
irgendwie amchst du mir zu viele variablen für meinen geschmack ich hätte das so gemacht:

die Anzhal holen:

Anzahl_Steine=getPreferences(0).getLong("PasswortShopSpeicher", Klickerhöhung_Steine)

die Anzahl speichern:

SharedPreferences.Editor editor = getPreferences(0).edit();
editor.putLong("PasswortShopSpeicher", Klickerhöhung_Steine);
editor.commit();

oder noch fauler:
getPreferences(0).edit().putLong("PasswortShopSpeicher", Klickerhöhung_Steine).commit();


und bei statsichen variablen würde ich sehr aufpassen....wenn die activity gekillt wird dann werden alle statischen variablen mit 0 0.0,"/u0000" oder null initialisiert


das heißt wenn du in deiner neuen Activity die statische long variable aus der vorherigen activity haben möchtest ist diese nunmal 0 falls die activity gekillt wurde....


genauso läufst gefahr während der user kurz mal ne andere app anmacht die statischen variablen auf standard initialisiert zu werden wenn die Activity gekillt wird.....in oncreate würde ich mir die variablen holen und in ondestroy die sharedprefs aktualisieren
und keine statischen variablen nutzen
 
Zuletzt bearbeitet:
Also ich habe jetzt alles so gemacht wie du es gesagt hast aber es funktioniert irgendwie nicht

Kann mir vielleicht jemand erklären wie putExtra funktioniertund ob das gier passen würde
 
Der Code sieht echt heiß aus oO
1. Variablen klein - nur Klassen fangen mit einem großen Buchstaben ab
2. Die Benennung der Variablen empfinde ich als ebenfalls nicht gerade sinnvoll. SharedPreferences "prefs" und nicht "Steichbruch...", oder sonst wie zu nennen, macht es anderen, die deinen Code verstehen sollen, deutlich(!) einfacher.
Tipp: Es ist hilfreich globale Variablen (also Member der Klasse) mit einem kleinen "m" anfangen zu lassen. zB "mPrefs"
3. Variablen sollten in ihrer Länge eine gewisse Begrenztheit an Zeichen besitzen. Schnell-lesbarer Code hat selten mehr als 80-100 Zeichen pro Zeile (inkl. Tabs).
Weitere Infos, wie du deinen Code besser strukturieren kannst findest du hier:
https://source.android.com/source/code-style.html

Nun zu deiner Frage... Hier ein Codebeispiel:
Code:
Intent intent = new Intent(ErsteActivity.this, ZweiteActivity.class)
intent.putExtra("deinKey", eineVariableDeinerWahl);
startActivity(intent);
// finish(); // <- ggf. ist dieser Aufruf wichtig für die Navigation in deiner App - das wirst du selbst am besten wissen...
und so holen wir die Infos in der ZweitenActivity aus dem Intent heraus
Code:
// getIntent.getStringExtra("deinKey"); // falls es ein String ist
// getIntent.getIntExtra("deinKey", KONSTATER_DEFAULT_WERT); // falls es ein Integer ist - beachte den Default-Wert
// das geht auch für Longs, Boolean, Doubles, Arrays...
(andere Möglichkeit wäre noch ein Bundle zu packen und das dem Intent mitzugeben.)

Aber wie gesagt, ich bin mir fast sicher, dass du noch nicht so weit bist.. Schaue dir erstmal die Basics in Android an und mach dann mit deiner App weiter. Aktuell kann ich mir beim besten Willen nicht vorstellen, dass das was du da treibst etwas mit halbwegs produktivem Arbeiten/Programmieren zu tun hat.
Getting Started | Android Developers
Arbeite diese Seiten in Ruhe durch und du wirst dir viel Zeit, Nerven und doppelte Arbeit ersparen. Versprochen!

PS: Der Beitrag liest sich wieder viel "härter/böser", als er eigentlich gemeint ist - aber wenn du am Ende eine funktionierende App haben willst, die auch im Nachhinein noch wartbar ist, solltest du den ein oder anderen Ratschlag beherzigen.
 
Zuletzt bearbeitet:
ja ist wirklich ein bisschen umständlich mit der namensgebung von ihm muss ich schon zu geben viele variablen sehen auf den ersten blick gleich aus und man emrkt nciht dass es sich um vers. vars handelt.

ausserdem würde ich behaupten dass er sich mit seinen statischen variablen in gefahr begiobt einen Memory Leak zu erzeugen wenn er nciht aufpasst...das könnte dazu führen dass du dich eines tages mal mit memory analyzer auseinander setzen musst und dort nach den leaks suchen musst die dir ab und zu eine outofmemory ex liefern


aber das nur am rande
 
Jaiel schrieb:
ausserdem würde ich behaupten dass er sich mit seinen statischen variablen in gefahr begiobt einen Memory Leak zu erzeugen wenn er nciht aufpasst...

Das habe ich auch schon häufig gehört, ob und wie groß die Problematik wirklich ist, kann ich selbst kaum beurteilen, da ich noch keine Probleme damit hatte. Aber ich nutze auch nur GANZ selten statics.

Es heißt zwar immer dass der GarbageCollector mit jeder neuen Android Version besser wurde - in wie weit das wirklich stimmt und wie weit man "heute" wirklich ist, welchen Einfluss hier ART hat, etc, etc, kann ich dementsprechend nicht sagen. Interessieren würde es mich trotzdem^^

Aber ich stimme dir voll zu, unschön ist es allemal, da es einen Rattenschwanz an Problemen mitbringt, wenn man von static wieder auf die "normale Objektorientierung" zurückkommen möchte - letztlich ist das Risiko immer groß sich mit diesem Keyword ein ganzes Programm zu verhunzen, da ein "static" selten alleine kommt. :D

(In "Helferklassen" geht static meiner Meinung nach in Ordnung, hier hat man aber auch einen Grund, das Keyword zu nutzen)
 
Ja ganz deiner Meinung
Ich hatte vor einigen Tagen mal ein video von der Google I/O gesehen wo es um das Thema Memory Leaks ging. Da wurden speziell die Unterschiede wie Bitmaps(vor Gingerbread wurden die pixel informationen zum Beispiel noch native angelegt so war es z.B. schwieriger seinen code zu debuggen, seit gingerbread sind sie teil des heaps) organisiert wurden und wie der GC so vorgeht...wenn er jetzt einen Fehler machen würde und eine statische referenz auf ein objekt halten würde das nciht mehr gebraucht wird....zum Beispiel ganz schlimm auf ein Context object läuft er gefahr einen ganzen hierarchie baum der views einer activity oder halt bitmaps im speicher zu behalten obwohl er das nciht möchte.

ich woltle ihn also nur vorwarnen sehr vorsihtig mit sowas umzugehen
 
Statische Methoden sind recht übel, da die Objekte, die an ihnen hängen, nicht weggeräumt werden. Hängen im Speicher herum, und sind teilwiese nicht mehr erreichbar.

Der GC von Android hat so seine Macken. In Android 5.x soll ein größerer sein.

Weakreferences sind auch nicht viel besser. In den Anfangstagen von Titanium führten die zum Absturz der Apps. ;)

Weiß nicht wie ist zur Zeit ist.
 
Zur Zeit braucht man sich nicht über weak references zu sorgen die halten den GC nicht davon ab die Sachen wegzuräumen
 

Ähnliche Themen

S
  • Sempervivum
Antworten
2
Aufrufe
607
Sempervivum
S
Laser5001
  • Laser5001
Antworten
2
Aufrufe
900
Laser5001
Laser5001
M
  • maksimilian
Antworten
15
Aufrufe
1.703
maksimilian
M
Zurück
Oben Unten