2016-06-29 200 views
0

我打电话服务从应用程序类,如果我关闭应用程序或从当前正在运行的应用程序中删除,则服务将自动销毁,我没有写任何代码destroy()方法服务将关闭,如果我关闭我的应用程序

来电来访服务代码:

Intent syncIntent = new Intent(this, ScanBLE_Service.class); 
this.startService(syncIntent); 

这里是服务类的代码

public class ScanBLE_Service extends IntentService { 


    public ScanBLE_Service() { 
    super(ScanBLE_Service.class.getName()); 
    // TODO Auto-generated constructor stub 

    mHandler = new Handler(); 

} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // TODO Auto-generated method stub 
       demo(); 
}} 

    private void demo() { 

    mHandler.removeCallbacksAndMessages(null); 
    mHandler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
            Toast.makeText(getApplicationContext(), "Demoooo", Toast.LENGTH_SHORT).show(); 

        demo(); 
       } 
      }, 5000 
    ); 
} 
+0

这是出乎意料的,因为? –

+0

这不是预期的行为,你能粘贴你的服务代码吗? –

+0

发布您的服务分类 –

回答

1

您应该使用服务,不是IntentService。扩展服务类并覆盖onStartCommand方法,然后使用此方法进行计算

+0

谢谢@Shayan_Aryan,我扩展了Service而不是Intent Service。现在我的服务正在运行,即使我从正在运行的应用中删除应用。 –

+0

您的欢迎。所以请将我的回答标记为已接受 –

0

是的,如果申请关闭,服务将被关闭。一种情况是,当服务不会被关闭以在通知屏幕上显示不变的通知时。 更多here

+0

这是不正确的。服务将保持在后台 –

0

正常行为是该服务将继续即使在应用程序关闭运行,因为它是从应用程序分离,并在后台运行,除非你调用stopSelf()或stopService(X,X)应该继续运行..

PS:还有另一种类型的服务,这是IntentService的(扩展IntentService而不是服务),并曾在onHandleIntent()的代码被执行,这将自动停止..

1

即使在应用程序被销毁后仍然运行服务,您需要执行以下操作。

  1. 服务班组长
  2. 回报START_STICKYonStartCommand()
  3. 覆盖onTaskRemoved(请参阅下面的示例代码)扩展您的服务。

    public class MyIntentService extends Service Timer mTimer;

    @Override 
        public void onCreate() 
        { 
         super.onCreate(); 
    
         mTimer = new Timer(); 
    
        } 
    
        @Override 
        public int onStartCommand(Intent intent, int flags, int startId) 
        { 
         mTimer.schedule(mTimerTask, 1000, 5000); 
    
         return START_STICKY; 
        } 
    
        @Nullable 
        @Override 
        public IBinder onBind(Intent intent) 
        { 
         return null; 
        } 
    
    
        TimerTask mTimerTask = new TimerTask() 
        { 
         @Override 
         public void run() 
         { 
          System.out.println("timer task run"); 
    
         } 
        }; 
    
    
        @Override 
        public void onTaskRemoved(Intent rootIntent) 
        { 
         System.out.println("onTaskRemoved"); 
    
         Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass()); 
         restartServiceIntent.setPackage(getPackageName()); 
    
         PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT); 
         AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
         alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent); 
    
         super.onTaskRemoved(rootIntent); 
        } 
    
    } 
    
相关问题