Al usar el famoso canario de fugas para detectar fugas de memoria, descubrimos que después de agregar la dependencia de canario de fugas, cuando la aplicación se ejecuta nuevamente, habrá un ícono de aplicación adicional en el escritorio.
Abra la aplicación Leaks para ver las fugas de memoria en su aplicación.
Que haya un ícono de aplicación más en el escritorio, ¿cómo se hace esto?
La respuesta es usar activity-alias
.
1. Establecer dos entradas para la aplicación y comenzar dos actividades respectivamente
Por ejemplo, especificando otro punto de entrada activity-alias
para la aplicación:
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:exported="false"
android:taskAffinity="second.affinity"/>
<activity-alias
android:name="SecondActivity"
android:exported="true"
android:icon="@mipmap/ic_launcher"
android:label="SecondActivity"
android:targetActivity=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
复制代码
Se puede ver que la entrada de la aplicación es MainActivity, pero también configuramos el filtro de intención de la entrada de la aplicación para SecondActivity a través del alias de actividad.Después de la instalación, habrá dos entradas en el escritorio:
Al hacer clic en los dos iconos, se iniciarán dos actividades diferentes. Aquí, taskAffinity también se configura para SecondActivity, de modo que cuando se inicia SecondActivity, se coloca en una nueva pila.
2. Configure dos entradas para la aplicación e inicie la misma Actividad
activity-alias
Al agregar una entrada, ¿es necesario iniciar una actividad diferente?
La respuesta no es necesariamente. activity-alias
También nos permite definir múltiples alias para una misma Actividad, para lograr el efecto de que una aplicación tenga múltiples íconos o múltiples entradas de inicio.
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias
android:name=".Alias"
android:icon="@mipmap/ic_chrome"
android:label="Fake Chrome"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
复制代码
Se puede ver que la entrada de la aplicación es MainActivity, pero configuramos un alias para MainActivity a través de activity-alias.Después de la instalación, habrá dos entradas en el escritorio:
Al hacer clic en ambos íconos, se iniciará la misma Actividad.
3. ¿Qué más puede hacer el alias de actividad?
Si necesitamos configurar una actividad para permitir la apertura de una página web, generalmente usamos este enfoque:
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity>
复制代码
Aquí, se agrega a MainActivity un filtro de intenciones que admite la apertura de páginas web. Después de ejecutar, cuando se encuentra una solicitud para abrir un enlace, aparecerá un cuadro de diálogo como este:
Además de este método, el alias de actividad también puede lograr la misma función.
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias
android:name=".browser"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity-alias>
复制代码
Además, el alias de actividad también puede agregar una descripción de etiqueta a nuestra aplicación.
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias
android:name=".browser"
android:label="My Browser"
android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity-alias>
复制代码
Abra el enlace en este momento, y nuestra etiqueta recién agregada se mostrará en la parte inferior de Mi aplicación: Mi navegador:
Cuatro Resumen
activity-alias proporciona más flexibilidad y personalización a la aplicación. Usando el alias de actividad, podemos definir múltiples entradas para una actividad, mejorando así la experiencia del usuario de la aplicación.