Я могу связать сервис, используя класс CustomTabActivityManger
, но нет возможности отменить привязку сервиса в этом классе
Анализировать:
Обычно мы можем напрямую использовать unbindService , чтобы отменить привязку Service
.Но в исходном коде CustomTabActivityManger мы не нашли там метода UnBindService()
.И вы не можете получить экземпляр CustomTabsServiceConnection
извне, так что трудно отсоединить службу в вашем Activity
:
public class CustomTabsActivityManager
{
...
CustomTabsServiceConnectionImpl connection;
...
public bool BindService (string servicePackageName = null)
{
...
connection = new CustomTabsServiceConnectionImpl {
CustomTabsServiceConnectedHandler = (name, client) => {
Client = client;
var evt = CustomTabsServiceConnected;
if (evt != null)
evt (name, client);
},
OnServiceDisconnectedHandler = (name) => {
var evt = CustomTabsServiceDisconnected;
if (evt != null)
evt (name);
}
};
return CustomTabsClient.BindCustomTabsService (ParentActivity, servicePackageName, connection);
}
}
class CustomTabsServiceConnectionImpl : CustomTabsServiceConnection
{
...
}
Решение :
Вы можете создать пользовательский CustomTabsActivityManager
class и добавьте UnBindService()
метод:
public class MyCustomTabsActivityManager
{
CustomTabsServiceConnectionImpl connection;
public Activity ParentActivity { get; private set; }
public CustomTabsClient Client { get; private set; }
CustomTabsSession session = null;
...
public void UnBindService()
{
if (connection != null)
{
ParentActivity.UnbindService(connection);
Client = null;
session = null;
}
}
}
Затем вы можете использовать это UnBindService()
в вашем Activity
:
protected override void OnDestroy()
{
myCustomTabsActivityManager.UnBindService();
base.OnDestroy();
}