( 2ª respuesta : necesito mucha más contribución)
Después de 8 horas investigando en el sistema operativo Android y el sitio web de desarrolladores de Android para encontrar una solución para reiniciar la actividad cuando clearApplicationUserDatase invoca. Finalmente, podría encontrar una solución agradable / piratería .
Esta solución se ve como zidane dribble :)
Vamos a introducir la solución. en un primer momento, clearApplicationUserDatase borran todas las pistas de aplicación cuando se invoca como tareas, notificaciones, alarmas , etc, por lo tanto, explícita vocación de actividad es imposible .
La forma implícita es la única forma posible de llamar a la actividad.
Después de un par de pruebas, descubrí que la aplicación manifestregistrada intent-filters no se eliminaría y pueden escuchar las transmisiones entrantes del sistema .
Aproximadamente, el 98% de las transmisiones del sistema no serían recibidas por una aplicación autorizada y ese 2% restante podría no transmitirse muy pronto.
Entonces lo que hay que hacer ? hmmm? vamos hombre, debo encontrar una solución ...
bingo, debo activar algo para que el sistema lo transmita <= parece piratería :)
así que decido elegir WIFI_STATE_CHANGED porque
- Permiso de acceso fácil
- El sistema lo transmite con retraso <= esto asegura que la aplicación esté cerrada antes de la transmisión
manifest.xml
<receiver
android:name=".PackageDataClearedReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
MainActivity.java
public class MainActivity extends AppCompatActivity {
ActivityManager am;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AppCompatButton btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(new Runnable() {
@Override
public void run() {
am = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
if (am != null) {
ExecutorService pool = Executors.newFixedThreadPool(2);
final Collection<Future> futures = new HashSet<Future>();
futures.add(pool.submit(new Runnable() {
@Override
public void run() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
wifiManager.setWifiEnabled(false);
am.clearApplicationUserData();
}
}));
for (Future future : futures) {
future.isDone();
}
}
}
}).start();
}
});
}
}
manifestación

tenga en cuenta que es solo un producto mínimo viable que debe desarrollarse más para que funcione perfectamente.
clearApplicationUserData()?" - Dudo que sea posible desde tu propia aplicación. Muestre un mensaje al usuario explicando que esto sucederá antes de llamar a ese método, y el usuario puede reiniciar la aplicación desde el iniciador.