IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[Android] gestion multi thread et consommation de la batterie


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Par défaut [Android] gestion multi thread et consommation de la batterie
    Bonjour,

    je viens de developper une application qui gère un système multi thread

    je fais un requête sqlite avec un timeout..

    j'ai un message comme quoi mon application est énergivore

    après un certains temps d'utilisation

    je fais donc appel a vous pour résoudre mon problème..

    merci pour vos réactions.

  2. #2
    Membre éclairé
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Par défaut Isolation du problème
    En fait ma question est plutôt simple..

    J'ai la géo-localisation qui tourne en arrière plan...

    Et la requête sqlite qui part toute les deux minutes..

    La qu'elle de ces deux technologies provoque une consommation énergétique élevé ?

  3. #3
    Membre très actif Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Par défaut
    Je bien que c'est la géolocalisation.
    Tu vas devoir optimiser le code de la géolocalisation.
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  4. #4
    Membre éclairé
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Par défaut Problème de géo-localisation..?
    Merci pour ta réaction..

    Tu pense alors que c'est la géo-localisation ?

    J'ai dans mon manifest.xml j'ai autorisé seulement access.Coarse.location et pas le access.Fine.location

    Tu pense que cela est suffisant ?

  5. #5
    Membre très actif Avatar de alves1993
    Homme Profil pro
    Développeur Java/Dart/Javascript/Android (FullStack)
    Inscrit en
    Décembre 2012
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Java/Dart/Javascript/Android (FullStack)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 222
    Par défaut
    Oui le problème se situe au niveau de la géolocalisation.
    Si ton application sollicite assez fréquemment la géolocalisation ton application sera évidemment énergivore .
    Peux-tu montrer le code qui gère la géolocalisation et les différents codes associés ?
    ton timeout pour les requêtes SQLite s’exécutes-t-il aussi fréquemment ?
    Un geek ne vieillit pas, il se met à jour.

    Pour plus d'informations sur Android regarder la faq Android.
    Ensuite les tutoriels Android sont disponibles ici
    Pour les mecs, qui n'arrivent pas toujours à digérer le Javascript, Dart peut-être une solution pour vous.

  6. #6
    Membre éclairé
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Par défaut Code de ma tache asychrone et de la localisation
    merci pour ta réaction..

    edit: ma consomation sur le smartphone est de 13mAh

    je ne connais pas la signification de cette valeur

    voici mon code de la localisation qui est dans ma tache asychrone..

    pour l'instant j'ai désactiver les requête sql je fait les comparaison avec une valeur statique pour les test..

    et j'ai toujours ce message que mon application est énergivore..

    La tache est executer toute les 60 sec..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    public static class ProgressTask extends AsyncTask<Void, Integer, Boolean> {
     
            // Identifiant de la boîte de dialogue
            public final static int ID_DIALOG = 0;
            public ProgressTask asyncObject;
            boolean flag = false;
            // Référence faible à l'activité
            private WeakReference<MainActivityTwo> mActivity = null;
            MyLocationLinstener gps;
            MyLocationLinstener network;
            Context C = VolleyApplication.getInstance().getApplicationContext();
            WeakReference<Context> weakReference = new WeakReference<Context>(C);
     
            public ProgressTask(MainActivityTwo pActivity) {
                link(pActivity);
            }
     
     
            @Override
            protected void onPreExecute() {
                // Au lancement, on affiche la boîte de dialogue
                // super.onPreExecute();
                flag = true;
            }
     
            @Override
            protected Boolean doInBackground(Void... params) {
     
                while (flag) {
     
                    //Your Code what you are doing in the Do inBackground
                    boolean isValueFoundNw = false;
                    boolean isValueFoundGps = false;
     
     
                    gps = new MyLocationLinstener(C) {
                    };
                    network = new MyLocationLinstener(C) {
                    };
     
                    LocationManager locationManager;
                    locationManager = (LocationManager) C
                            .getSystemService(LOCATION_SERVICE);
                    isGPSEnabled = locationManager
                            .isProviderEnabled(LocationManager.GPS_PROVIDER);
                    // getting network status
                    isNetworkEnabled = locationManager
                            .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
     
                     if (isNetworkEnabled) {
     
                        Log.i("NetworkTest", "true");
                        if (network.canGetLocation()) {
                            Log.i("NetworkCangetlocation", "true");
     
                            double latitude = network.getLatitude();
                            double longitude = network.getLongitude();
                            //---------------------------------------------------------------------------------------
                            final Location loc = new Location(LocationManager.NETWORK_PROVIDER);
                            final Location loc2 = new Location(LocationManager.NETWORK_PROVIDER);
                            // test radius network coar
                            float radius = 30;
                            float distance;
     
                            String lat = "50.778305";
                            String lng = "4.332104";
     
                            double lat1 = Double.parseDouble(lat);
                            double lng1 = Double.parseDouble(lng);
                            loc.setLatitude(Double.parseDouble(lat));
                            loc2.setLatitude(latitude);
                            loc.setLongitude(Double.parseDouble(lng));
                            loc2.setLongitude(longitude);
     
                            distance =  loc2.distanceTo(loc);
     
                            if (distance < 30 || distance > 680) {
                                 // do someting..
                            }
                            if (isValueFoundNw) {
                                // do someting..
                            }  
                        }
                    }
     
                    try {
                        Thread.sleep(60000);//Your Interval after which you want to refresh the screen
                    } catch (InterruptedException e) {
                    }
                }
                return true;
            }
     
            @Override
            protected void onPostExecute(Boolean result) {
     
                if (mActivity.get() != null) {
                    if (result)
                        Toast.makeText(mActivity.get(), "Location running..", Toast.LENGTH_SHORT).show();
                    else
                        Toast.makeText(mActivity.get(), "No Location found", Toast.LENGTH_SHORT).show();
                }
            }
     
     
            @Override
            protected void onProgressUpdate(Integer... prog) {
                // À chaque avancement du téléchargement, on met à jour la boîte de dialogue
                Log.i("onPorgressUpdate", "Fait");
            }
     
            @Override
            protected void onCancelled() {
                if (mActivity.get() != null)
                    Toast.makeText(mActivity.get(), "No Location found", Toast.LENGTH_SHORT).show();
            }
     
            public void link(MainActivityTwo pActivity) {
                mActivity = new WeakReference<MainActivityTwo>(pActivity);
            }
     
     
        }
    et voici ma fonction qui est appeler dans ma fonction OnCreate() la localisation est executer aussi toute les 60 sec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    private void addLocationListener() {
            Log.i("addLocationListener", "function is RUNNING!");
            lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
     
            Criteria c = new Criteria();
            c.setAccuracy(Criteria.ACCURACY_FINE);
     
            final Belgium bel = new Belgium();
            final String PROVIDER = lm.getBestProvider(c, true);
            final Location locGps = new Location(LocationManager.GPS_PROVIDER);
            final Location locNet = new Location(LocationManager.NETWORK_PROVIDER);
            this.myLocationListener = new MyLocationLinstener(getApplicationContext()) {
     
                @Override
                public void onLocationChanged(Location location) {
                    super.onLocationChanged(location);
     
     
                    // On recrée à chaque fois l'objet
                    mProgress = new ProgressTask(MainActivityTwo.this);
                    // On l'exécute
                    mProgress.execute();
                    //mProgress.cancel(true);
     
                    if (running == false) {
                        //destroy process..
                        mProgress.cancel(true);
                        running = true;
                    }
     
                    Toast.makeText(context, "Location changed", Toast.LENGTH_SHORT).show();
     
                }
     
     
                @Override
                public void onProviderDisabled(String provider) {
                    super.onProviderDisabled(provider);
                    //Toast.makeText(context, "Gps Disabled", Toast.LENGTH_SHORT).show();
                }
     
                @Override
                public void onProviderEnabled(String provider) {
                    super.onProviderEnabled(provider);
                    Toast.makeText(context, "Gps Enabled", Toast.LENGTH_SHORT).show();
                }
     
                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                    super.onStatusChanged(provider, status, extras);
                }
     
     
            };
         if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
     
            this.lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, this.myLocationListener);
        }
    pur mes test je fait la localisation avec le wifi et l'antenne relais.. je laisse le gps pour après.. vu que cette techno est plus consommatrice en energie que le résaux

Discussions similaires

  1. Gestion des thread sous Android
    Par bind ways dans le forum Android
    Réponses: 4
    Dernier message: 08/04/2011, 10h43
  2. Multi-threading: Gestion de l'UI et de WebServices.
    Par Ephismen dans le forum Silverlight
    Réponses: 18
    Dernier message: 01/09/2010, 21h17
  3. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  4. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo