2017-05-15 4 views
1

Ci-dessous est mon fichier manifeste.BroadcastReceiver pour BOOT_COMPLETED est trop lent

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.mccheekati.test_trail"> 
    <uses-permission 
    android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <receiver 
    android:name="com.example.mccheekati.test_trail.yourActivityRunOnStartup" 
     android:enabled="true" 
     android:exported="true" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 

     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" 
      /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Le récepteur de diffusion est la suivante:

public class yourActivityRunOnStartup extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { 
     Intent i = new Intent(context, MainActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } 
} 

}

Aucune erreur. L'application s'ouvre sur le redémarrage du téléphone. Mais il faut une minute pour lancer l'application après le redémarrage. Y a-t-il quoi démarrer l'application immédiatement après le redémarrage?

Répondre

3

Y a-t-il quoi démarrer l'application immédiatement après le redémarrage?

No.

Il y a beaucoup, de nombreuses applications qui veulent obtenir le contrôle au démarrage. La rapidité avec laquelle votre tour dépendra de nombreuses variables, telles que le nombre d'applications installées, la vitesse du processeur de l'appareil, la quantité de RAM système sur l'appareil, etc.

De même, démarrer une activité depuis un périphérique BroadcastReceiver au moment du démarrage est assez mal. Si vous voulez être la première chose que l'utilisateur voit après un redémarrage, écrivez une implémentation d'écran d'accueil.

+0

Merci beaucoup. J'ai essayé le mode d'écran d'accueil et cela a fonctionné. Mais y a-t-il un moyen de naviguer entre l'écran d'accueil par défaut du téléphone et mon écran d'accueil personnalisé? –

+0

@mCheekati: Si vous voulez dire "Puis-je lancer l'écran d'accueil par défaut de mon téléphone à partir de mon application?", La réponse est oui. Vous auriez besoin de comprendre ce qu'est cette activité, en utilisant 'PackageManager',' queryIntentActivities() ', et un' Intent' pour l'écran d'accueil ('ACTION_MAIN',' CATEGORY_HOME'). Votre activité sera dans la liste résultante, avec 1+ autres. Une fois que vous avez trouvé la bonne activité, mettez à jour votre 'ACTION_MAIN' /' CATEGORY_HOME' 'Intent' avec le' ComponentName' de l'activité spécifique pour démarrer. – CommonsWare

+0

J'ai récupéré la liste des lanceurs disponibles sur mon téléphone. Mais impossible de définir le composant pour devenir un écran d'accueil. D'autres lanceurs sont au moins l'ouverture (Non, pas comme écran d'accueil), mais sur le clic des lanceurs par défaut du système arrête l'application malheureusement. –

1

Il y aura des ressources système qui devront d'abord démarrer et auront une priorité plus élevée sur votre récepteur. Cependant, vous pouvez essayer de définir une priorité à votre intention dans le manifeste. Comme si:

<intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" android:priority="999"/> 
     <action android:name="android.intent.action.QUICKBOOT_POWERON" 
     /> 

S'il vous plaît jeter un oeil sur les détails des développeurs docs à ce sujet: Docs

Extrait concernant la priorité: Il contrôle l'ordre dans lequel les récepteurs diffusés sont exécutés pour recevoir des messages diffusés . Ceux avec des valeurs de priorité plus élevées sont appelés avant ceux avec des valeurs plus basses. (La commande s'applique uniquement aux messages synchrones, elle est ignorée pour les messages asynchrones.) Utilisez cet attribut uniquement si vous devez vraiment imposer un ordre spécifique dans lequel les diffusions sont reçues ou si vous souhaitez forcer Android à préférer une activité à d'autres. La valeur doit être un nombre entier, tel que "100". Les nombres plus élevés ont une priorité plus élevée. La valeur par défaut est 0. La valeur doit être supérieure à -1000 et inférieure à 1000.

+0

J'ai essayé de changer la mise à jour de la priorité mais aucun changement dans les résultats. L'implémentation de l'écran d'accueil a fonctionné. Merci pour l'information cependant parce que je n'ai jamais su au sujet des priorités pourtant car je suis un débutant à android. –

+0

Votre bienvenue, heureux l'info a aidé un peu et heureux que vous ayez résolu le problème en utilisant l'installation de l'écran d'accueil. –