Ich möchte, dass meine Anwendung professioneller aussieht, also habe ich beschlossen, einen Splash-Screen hinzuzufügen.
Wie sollte ich bei der Umsetzung vorgehen?
Ich möchte, dass meine Anwendung professioneller aussieht, also habe ich beschlossen, einen Splash-Screen hinzuzufügen.
Wie sollte ich bei der Umsetzung vorgehen?
Ein Splash Screnn lässt Ihre Anwendung nicht automatisch professioneller aussehen. Ein professionell gestalteter Startbildschirm kann Ihre Anwendung professioneller aussehen lassen, aber wenn Sie nicht wissen, wie man einen solchen schreibt, wie professionell wird dann der Rest Ihrer Anwendung tatsächlich sein.
Der einzige Grund (Entschuldigung) für einen Splash-Screen ist, dass Sie eine große Menge an Berechnungen durchführen oder auf den Start von GPS/WiFi warten, weil Ihre Anwendung darauf angewiesen ist, bevor sie startet. Ohne das Ergebnis dieser Berechnungen oder den Zugriff auf GPS/WiFi (usw.) ist Ihre Anwendung aufgeschmissen, weshalb Sie der Meinung sind, dass Sie einen Splash-Screen benötigen und die Sicht auf den Bildschirm für alle anderen laufenden Programme (einschließlich des Hintergrunds) blockieren MÜSSEN.
Ein solcher Startbildschirm sollte wie Ihre Vollbildanwendung aussehen, um den Eindruck zu erwecken, dass sie bereits initialisiert ist. Nachdem die langwierigen Berechnungen abgeschlossen sind, können die letzten Details eingegeben werden (das Bild wird optimiert). Die Chance dass dies der Fall ist oder dass dies die einzige Möglichkeit ist, das Programm zu gestalten ist mächtig klein .
Es wäre besser, dem Benutzer (und dem Rest des Betriebssystems) die Möglichkeit zu geben, etwas anderes zu tun, während sie warten, als das Programm so zu gestalten, dass es von etwas abhängt, das eine Weile dauert (wenn die Dauer der Wartezeit ungewiss ist).
Es gibt bereits Symbole auf Ihrem Telefon, die anzeigen, dass GPS/WiFi gestartet ist. Die Zeit oder der Platz, den der Splash Screen einnimmt, könnte für das Laden von Vorberechnungen oder für die eigentlichen Berechnungen verwendet werden. Siehe den ersten Link unten für die Probleme, die Sie schaffen und was zu beachten ist.
Wenn Sie unbedingt auf diese Berechnungen oder GPS/WiFi warten müssen, wäre es am besten, die Anwendung einfach starten zu lassen und ein Popup-Fenster einzublenden, das darauf hinweist, dass auf die Berechnungen gewartet werden muss (eine TEXTUELLE "Initialisierungs"-Meldung ist in Ordnung). Die Wartezeit für GPS/WiFi wird erwartet (wenn sie nicht bereits in einem anderen Programm aktiviert wurden), so dass die Ankündigung ihrer Wartezeiten unnötig ist.
Denken Sie daran, dass Ihr Programm bereits läuft, wenn der Startbildschirm erscheint. Sie verzögern lediglich die Nutzung Ihres Programms und beanspruchen die CPU/GPU für etwas, das die meisten nicht für notwendig halten.
Es wäre besser, wenn wir jedes Mal, wenn wir Ihr Programm starten, Ihren Splash-Screen sehen würden, sonst haben wir nicht das Gefühl, dass es sehr professionell geschrieben ist. Wenn Sie den Startbildschirm zu einem VOLLEN Bildschirm und einem Duplikat des eigentlichen Programmbildschirms machen (so dass wir denken, dass es initialisiert ist, obwohl es das in Wirklichkeit nicht ist), könnten Sie Ihr Ziel (Ihr Programm professioneller aussehen zu lassen) vielleicht erreichen, aber ich würde nicht viel darauf wetten.
Warum man es nicht tun sollte: http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/
Wie man es macht: https://encrypted.google.com/search?q=Android+splash+screen+source
Es gibt also einen guten Grund, es nicht zu tun, aber WENN Sie sicher sind, dass Ihre Situation irgendwie außerhalb dieser Beispiele liegt, dann ist das Mittel, es zu tun, oben angegeben. Vergewissern Sie sich, dass Ihre Bewerbung dadurch wirklich professioneller aussieht, oder Sie haben den einzigen Grund, den Sie für diese Maßnahme angegeben haben, zunichte gemacht.
Es ist wie bei einem YouTube-Kanal, der jedes Video mit einem langen grafischen Intro (und Outro) beginnt oder das Bedürfnis hat, einen Witz zu erzählen oder zu erklären, was in der letzten Woche passiert ist (wenn es sich nicht um einen Comedy- oder LifeStyles-Kanal handelt). Zeigen Sie einfach die Sendung! (Lassen Sie einfach das Programm laufen).
Erstellen einer Activity
SplashScreen.java
public class SplashScreen extends Activity {
protected boolean _active = true;
protected int _splashTime = 3000; // time to display the splash screen in ms
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
Thread splashTread = new Thread() {
@Override
public void run() {
try {
int waited = 0;
while (_active && (waited < _splashTime)) {
sleep(100);
if (_active) {
waited += 100;
}
}
} catch (Exception e) {
} finally {
startActivity(new Intent(SplashScreen.this,
MainActivity.class));
finish();
}
};
};
splashTread.start();
}
}
splashscreen.xml
wird wie folgt aussehen
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="600px" android:layout_height="1024px"
android:background="#FF0000">
</RelativeLayout>
Vor allem die Antworten sind wirklich sehr gut. Aber es gibt das Problem des Speicherverlusts. Dieses Problem ist in der Android-Community oft bekannt als "Eine Aktivität auslaufen lassen" . Was bedeutet das nun genau?
Wenn sich die Konfiguration ändert, z. B. bei einer Ausrichtungsänderung, zerstört Android die Aktivität und erstellt sie neu. Normalerweise löscht der Garbage Collector einfach den zugewiesenen Speicher der alten Activity-Instanz und alles ist gut.
"Eine Aktivität auslaufen lassen" bezieht sich auf die Situation, in der der Garbage Collector den zugewiesenen Speicher der alten Activity-Instanz nicht löschen kann, da er being (strong) referenced
von einem Objekt, das die Activity-Instanz überlebt hat. Jeder Android-App wird eine bestimmte Menge an Speicher zugewiesen. Wenn der Garbage Collector nicht in der Lage ist, ungenutzten Speicher freizugeben, wird die Leistung der App allmählich abnehmen und schließlich mit OutOfMemory
Fehler.
Wie kann man feststellen, ob die Anwendung Speicher leckt oder nicht? Der schnellste Weg ist, die Registerkarte "Speicher" in Android Studio zu öffnen und auf den zugewiesenen Speicher zu achten, während Sie die Ausrichtung ändern. Wenn der zugewiesene Speicher immer weiter ansteigt und nicht abnimmt, haben Sie ein Speicherleck.
1. ein Speicherleck, wenn der Benutzer die Ausrichtung ändert.
Zuerst müssen Sie den Splash-Screen in Ihrer Layout-Ressource definieren splashscreen.xml
Datei
Beispielcode für eine Splash-Screen-Aktivität.
public class Splash extends Activity {
// 1. Create a static nested class that extends Runnable to start the main Activity
private static class StartMainActivityRunnable implements Runnable {
// 2. Make sure we keep the source Activity as a WeakReference (more on that later)
private WeakReference mActivity;
private StartMainActivityRunnable(Activity activity) {
mActivity = new WeakReference(activity);
}
@Override
public void run() {
// 3. Check that the reference is valid and execute the code
if (mActivity.get() != null) {
Activity activity = mActivity.get();
Intent mainIntent = new Intent(activity, MainActivity.class);
activity.startActivity(mainIntent);
activity.finish();
}
}
}
/** Duration of wait **/
private final int SPLASH_DISPLAY_LENGTH = 1000;
// 4. Declare the Handler as a member variable
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(icicle);
setContentView(R.layout.splashscreen);
// 5. Pass a new instance of StartMainActivityRunnable with reference to 'this'.
mHandler.postDelayed(new StartMainActivityRunnable(this), SPLASH_DISPLAY_LENGTH);
}
// 6. Override onDestroy()
@Override
public void onDestroy() {
// 7. Remove any delayed Runnable(s) and prevent them from executing.
mHandler.removeCallbacksAndMessages(null);
// 8. Eagerly clear mHandler allocated memory
mHandler = null;
}
}
Weitere Informationen finden Sie hier enlace
Das unnötige Anhalten auf dem Splash-Screen für 4er und 5er macht nicht viel Sinn. Es ist in Ordnung, wenn Sie etwas im Hintergrund laden, sonst folgen Sie diesem Ansatz, um den Splash-Screen zu implementieren: - Einen Splash-Screen richtig zu implementieren ist etwas anders, als Sie vielleicht denken. Die Splash-Ansicht, die Sie sehen, muss sofort fertig sein, noch bevor Sie eine Layout-Datei in Ihrer Splash-Aktivität aufblasen können.
Sie werden also keine Layout-Datei verwenden. Geben Sie stattdessen den Hintergrund Ihres Startbildschirms als Themenhintergrund der Aktivität an. Dazu erstellen Sie zunächst ein XML-Drawable in res/drawable.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/gray"/>
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>
Hier habe ich eine Hintergrundfarbe und ein Bild eingestellt.
Als Nächstes werden Sie dies als Hintergrund für Ihre Splash-Aktivität im Thema festlegen. Navigieren Sie zu Ihrer Datei styles.xml und fügen Sie ein neues Design für Ihre Splash-Aktivität hinzu:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
</resources>
Setzen Sie in Ihrem neuen SplashTheme das Attribut window background auf Ihre XML-Drawable. Konfigurieren Sie dies als das Thema Ihrer Splash-Aktivität in Ihrer AndroidManifest.xml:
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Schließlich sollte die Klasse SplashActivity Sie einfach zu Ihrer Hauptaktivität weiterleiten:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
Mehr Details lesen Sie hier: 1. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ 2. http://blog.goodbarber.com/3-tips-to-create-a-great-splash-screen-for-your-mobile-app_a287.html
Werden Sie keine Layout-Datei verwenden. Stattdessen legen Sie den Hintergrund des Startbildschirms als Themenhintergrund der Aktivität fest. Dazu erstellen Sie zunächst ein XML-Drawable in res/drawable.
Hinweis: Der gesamte nachstehende Code ist verfügbar GitHub-Link
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/gray"/>
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>
Hier habe ich eine Hintergrundfarbe und ein Bild eingestellt.
Als Nächstes werden Sie dies als Hintergrund für Ihre Splash-Aktivität im Thema festlegen. Navigieren Sie zu Ihrer Datei styles.xml und fügen Sie ein neues Design für Ihre Splash-Aktivität hinzu:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
</resources>
Setzen Sie in Ihrem neuen SplashTheme das Attribut window background auf Ihr XML drawable. Konfigurieren Sie dies als das Thema Ihrer Splash-Aktivität in Ihrer AndroidManifest.xml:
<activity
android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Schließlich sollte Ihre SplashActivity-Klasse Sie einfach zu Ihrer Hauptaktivität weiterleiten:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
Beachten Sie, dass Sie nicht einmal eine Ansicht für diese SplashActivity einrichten. Die Ansicht kommt aus dem Thema. Wenn Sie die Benutzeroberfläche für Ihre Splash-Aktivität im Thema einrichten, ist sie sofort verfügbar.
Wenn Sie eine Layout-Datei für Ihre Splash-Aktivität hätten, wäre diese Layout-Datei für den Benutzer erst sichtbar, nachdem Ihre Anwendung vollständig initialisiert wurde, was zu spät ist. Sie möchten, dass der Splash nur in der kurzen Zeitspanne vor der Initialisierung der Anwendung angezeigt wird.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.