如何使服务保持活力?

时间:2016-07-20 06:55:33

标签: android service whatsapp huawei

Whatsapp服务如何继续在华为手机中运行?

我删除了受保护应用的whatsapp但Whatsapp服务未在屏幕中关闭 关闭时间。

我正在编写需要每次都运行的关键应用程序,但我的服务在屏幕关闭时被杀死。

我想写Whatsapp或AirDroid服务等服务 谁能解释一下?

我的意思是如何在华为手机中编写特别不关闭屏幕的服务

这是我的服务代码

  

AppLifeService

public class AppLifeService extends Service {
@Override
public IBinder onBind(Intent intent) {

    return null;
}



@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    super.onStartCommand(intent, flags, startId);


    startForeground(5, AppLifeReciever.createNotification(this));


    return  START_STICKY;
}


@Override
public void onDestroy() {


    //startService(new Intent(this, AppLifeService.class)); Updated : not need


    super.onDestroy();

}
}

3 个答案:

答案 0 :(得分:5)

在后退START_STICKY中使用onStartCommand()的服务将自动重新启动,您无需在onDestroy()

中重新启动它
    @Override
    public void onDestroy() {

      //  startService(new Intent(this, AppLifeService.class));
        super.onDestroy();

    }

答案 1 :(得分:3)

您需要在关闭时自动创建Service以“重新开启”BroadcastService

例如:

BroadcastService

public class MyBroadcastService extends BroadcastReceiver
{

 @Override
    public void onReceive(final Context context, Intent intent)
    {
     //do something
    }
}

自动“重新开启”服务

public class MyService extends Service
{

@Override
    public void onCreate()
    {
        // Handler will get associated with the current thread,
        // which is the main thread.
        super.onCreate();
        ctx = this;

    }

 @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub

        return null;
    }

@Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.i(TAG, "onStartCommand");
        //Toast.makeText(this, "onStartCommand", Toast.LENGTH_LONG).show();

        return START_STICKY;
    }

//launch when its closed
@Override
    public void onDestroy()
    {
        super.onDestroy();
        sendBroadcast(new Intent("YouWillNeverKillMe"));
        Toast.makeText(this, "YouWillNeverKillMe TOAST!!", Toast.LENGTH_LONG).show();
    }
}

AndroidManifest.XML

上声明
<receiver android:name=".BroadcastServicesBackground.MyBroadcastService">
            <intent-filter>
                <!--That name (YouWillNeverKillMe) you wrote on Myservice-->
                <action android:name="YouWillNeverKillMe"/>

                <data android:scheme="package"/>
            </intent-filter>
            <intent-filter>
                 <!--To launch on device boot-->
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

        <service android:name=".Services.MyService"/>

答案 2 :(得分:3)

  

@Sohail Zahid 在停止时,答案会告诉您repeatedly一次又一次地启动服务 。但是为了让服务保持活力,就像在后台播放歌曲一样。

我找到的最佳方法是

startForeground(int, Notification)

其中int值对于每个通知都必须是唯一的

您需要为正在执行部分的通知栏中显示的方法提供Notification通过这种方式,应用程序可以在后台保持活动状态而不会出现任何中断。