gpt4 book ai didi

当我退出应用程序时 Android 服务停止

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:30:54 26 4
gpt4 key购买 nike

我有一个带有服务的应用程序。服务由应用程序在创建方法的主要 Activity 中启动。当我退出应用程序时出现我的问题:服务停止,有时立即重新启动,有时最近重新启动。我在4.1.2版本和2.3.6版本中进行了测试。 2.3.6 版本不再提供服务。我的方法错了吗?在停止和重新启动时间之间,必须阻塞的调用可以到来。有什么办法可以在退出应用程序时不停止服务?注意:我无法使用远程服务。

我将 startForeground 添​​加到服务中,但同样的问题。当我退出应用程序时,即使我看到通知,服务也会停止并且不会重新启动版本 2.3.3。但是 phoneStateListener 取空值如何确保当我退出应用程序时,服务不会停止

 //application main metod
@Override
protected void onCreate(Bundle savedInstanceState) {
//.....

startService(new Intent(getApplicationContext(), MyPhoneStateListener.class));
}




@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
setCallListener();
setNoti();
return START_STICKY;
}

private void setCallListener()
{
try
{
if (phoneStateListener==null)
{

phoneStateListener = new StateListener();
telephonymanager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
telephonymanager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
}
}
catch(Exception ex)
{

}
}

私有(private)无效 setNoti() {

    Notification notification= new Notification(R.drawable.ic_launcher,  getResources().getString(R.string.app_name), System.currentTimeMillis());

Intent main = new Intent(this, MainActivity.class);

main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, main, PendingIntent.FLAG_UPDATE_CURRENT);

notification.setLatestEventInfo(this, getResources().getString(R.string.app_name), getResources().getStringArray(R.array.blockstate)[Sabitler.ShieldState].toString(), pendingIntent);

notification.flags |= Notification.FLAG_FOREGROUND_SERVICE | Notification.FLAG_NO_CLEAR;

startForeground(123456, notification);
}

我按照 Dhawal Sodha 的建议将 where setting callstatelistener 从服务更改为广播,但在这种情况下阻止不需要的调用会变慢。我认为广播 TelephonyManager 会初始化每个调用。下面的广播代码。当我使用服务时,当主要 Activity 退出时,服务在 2.3.3 版中停止。任何想法 ?广播还是服务?怎样才能让广播更快?每个调用变量和对象在广播中再次初始化。

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{

MyCustomStateListener myCustomStateListener;
TelephonyManager telephonymanager;
@Override
public void onReceive(Context context, Intent intent)
{
try
{
//Log.e("receiver1",String.valueOf(System.currentTimeMillis()));

telephonymanager = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
myCustomStateListener = new MyCustomStateListener(context,telephonymanager);
telephonymanager.listen(myCustomStateListener, PhoneStateListener.LISTEN_CALL_STATE);
//Log.e("receiver2",String.valueOf(System.currentTimeMillis()));
telephonymanager.listen(myCustomStateListener, PhoneStateListener.LISTEN_NONE);
}
catch(Exception ex)
{
Toast.makeText(context,"setCallListener:"+ex.toString(), Toast.LENGTH_SHORT).show();
}
}
}

最佳答案

您是否使用 startService 启动服务?如果是这样,当您结束 Activity 时,该服务不会绑定(bind)任何东西,并且可以被系统停止。

如果无论您的 Activity 如何,您都想运行后台服务,请使用 startForeground 并提供持续通知。

请参阅服务引用:http://developer.android.com/reference/android/app/Service.html

更新

正在使用 System.exit(0) 完成您的应用程序?当然,您的服务会停止,这会终止您的进程。你永远不应该退出这样的应用程序 - 只是 finish() 你的 Activity 。

关于当我退出应用程序时 Android 服务停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com