2015-03-03 35 views
0

在我的應用程序我運行的服務工作正常,但問題是當我打開任何應用程序,如什麼應用程序,臉書等 。再次我的服務啓動新鮮如何克服這個問題如何停止一個應用程序的服務,而我們正在使用另一個應用程序在Android

這是我的代碼,大家好:

public class GpsTracker extends Service implements LocationListener { 

    Intent intent1; 
    LocationManager locationManager; 
    public double latitude, longitude; 
    String Lat,Log,stringFromFragment,add,time; 
    Geocoder geocoder; 
    DBHelper dbh; 
    StringBuilder strReturnedAddress; 
    StausEventDao stausEventDao; 
    Context context; 
    int minutes=15*60000; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     intent1 = new Intent("com.ds.service"); 

     Toast.makeText(this, "Starting Tracker", Toast.LENGTH_SHORT).show(); 
     if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 900000, 1, this); 
     } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 900000, 1, this); 
     } else { 
      Toast.makeText(this, "Enable gps to get location", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     if(intent !=null) { 
      stringFromFragment = intent.getStringExtra("STATUS"); 
     } 
     return START_STICKY; 
    } 
    @Override 
    public void onLocationChanged(Location location) { 

     /* if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 1, this); 
     } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 1, this); 
     } else { 
      Toast.makeText(this, "Enable gps to get location", Toast.LENGTH_SHORT).show(); 
     }*/ 

     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
     context=getApplicationContext(); 



     Lat = String.valueOf(latitude); 
     Log = String.valueOf(longitude); 
     geocoder = new Geocoder(this, Locale.ENGLISH); 
     try { 
      List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1); 

      if (addresses != null) { 
       Address returnedAddress = addresses.get(0); 
       strReturnedAddress = new StringBuilder(""); 

       strReturnedAddress.append(returnedAddress.getAddressLine(1)).append("\n"); 
       add = strReturnedAddress.toString(); 
      } 
     } catch (IOException e) 
     { 
      e.printStackTrace(); 
      Toast.makeText(getApplicationContext()," Cannot get Address! ", Toast.LENGTH_LONG).show(); 
     } 

     dbh = new DBHelper(getApplicationContext()); 
     dbh.getReadableDatabase(); 

     stausEventDao=new StatusEventImpDao(context); 
     stausEventDao.saveStatusEventChange(latitude,longitude,add,time,stringFromFragment); 
     String values=stausEventDao.getValues(latitude,longitude,add,time,stringFromFragment); 

     Toast.makeText(getApplicationContext(),values,Toast.LENGTH_LONG).show(); 

     intent1.putExtra("LATITUDE", latitude); 
     intent1.putExtra("LONGITUDE", longitude); 
     intent1.putExtra("ADDRESS", add); 
     sendBroadcast(intent1); 
    } 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
    } 
    @Override 
    public void onProviderDisabled(String provider) { 
    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
    public class TrackerBinder extends Binder { 
     public GpsTracker getService() { 
      return GpsTracker.this; 
     } 
    } 
} 

回答

0

通常onStartCommand負責重新啓動該服務,嘗試返回START_NOT_STICKY應保持服務重新啓動。

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     if(intent !=null) { 
      stringFromFragment = intent.getStringExtra("STATUS"); 
     } 
     return START_NOT_STICKY; 
    } 
+0

我使用此START_NOT_STICKY;它的工作,但當我打開我的應用程序再次從其新鮮開放的服務 – ManikantaReddy 2015-03-03 09:03:44

1

如果開始在服務另一個應用程序結果「重新啓動」,那麼它可能是一個內存/資源問題......換句話說,那些其他應用程序消耗資源,你那被殺死的程度,那麼以後重新啓動這些應用程序的啓動已完成或允許您恢復。

你基本上有兩種選擇:

  1. 減少運行時,您的應用程序所消耗的資源,爲了防止這種情況(這是非常困難的,將設備而異)。但是,這種方法將確保您的服務持續運行。但它要求你減少或改變你的數據收集/處理的實質。

  2. 堅持需要經常保存或保留的數據,並在重新啓動之前跟蹤服務「關閉」的時間,以便儘可能多地收集數據。您還可以嘗試衡量使用的資源,內存消耗等,從而導致重新啓動,但這樣做可能會更快地關閉服務。這仍然可能有助於開發用於優化服務的參數。

其他應用程序不能阻止你的。您必須在系統的限制範圍內工作。一旦你意識到這一點,你對「問題」的處理方式將被重新定義。這些其他應用程序可能會消耗大量資源,特別是在較舊的設備上,但不管這是您描述的問題。

相關問題