유료 버전을 간단한 라이센스 서버로 사용하여 무료/유료 앱을 관리하려고합니다. 나는들의 OnDestroy 처리를 시도했습니다 두 가지 방법은()가 있습니다LVL 유료 앱의 BroadcastReceiver/IntentService
public class LicenseService extends IntentService
{
private static final String TAG = LicenseService.class.getSimpleName();
private LicenseCheckerCallback mLicenseCheckerCallback;
private LicenseChecker mChecker;
...
public LicenseService()
{
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent)
{
// Try to use more data here. ANDROID_ID is a single point of attack.
String deviceId = ...;
// Library calls this when it's done.
mLicenseCheckerCallback = new MyLicenseCheckerCallback();
// Construct the LicenseChecker with a policy.
mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId)),
BASE64_PUBLIC_KEY);
mChecker.checkAccess(mLicenseCheckerCallback);
}
private class MyLicenseCheckerCallback implements LicenseCheckerCallback
{
public void allow(int policyReason)
{
Log.i(TAG, "License Accepted");
Intent i = new Intent();
i.setAction(App.LICENSE_RECEIVER);
i.putExtra(App.LICENSE_RESULT, App.LICENSE_ALLOW);
sendBroadcast(i);
// mChecker.onDestroy();
}
public void dontAllow(int policyReason)
{
Log.e(TAG, "License Denied");
Intent i = new Intent();
i.setAction(App.LICENSE_RECEIVER);
i.putExtra(App.LICENSE_RESULT, App.LICENSE_DISALLOW);
sendBroadcast(i);
// mChecker.onDestroy();
}
public void applicationError(int errorCode)
{
Log.i(TAG, "LR Error");
Intent i = new Intent();
i.setAction(App.LICENSE_RECEIVER);
i.putExtra(App.LICENSE_RESULT, App.LICENSE_ERROR);
sendBroadcast(i);
// mChecker.onDestroy();
}
}
// @Override
// public void onDestroy() {
// super.onDestroy();
// mChecker.onDestroy();
// }
}
: IntentService를 호출
public class LicenseRequest extends BroadcastReceiver
{
private static final String TAG = LicenseRequest.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent)
{
if (!intent.getAction().equals(App.LICENSE_REQUEST))
{
return;
}
Intent licenseRequest = new Intent(context, LicenseService.class);
context.startService(licenseRequest);
}
}
:
유료 응용 프로그램은 수신기가 있습니다. 내가)합니다 (LicenseService.onDestroy 내에서 호출하면 내가 얻을 : 이것은 내가 믿는 콜백 전에 종료 IntentService의 수명주기 때문이다
04-11 15:35:13.604: W/MessageQueue(30689): Handler (android.os.Handler) {41388638} sending message to a Handler on a dead thread
04-11 15:35:13.604: W/MessageQueue(30689): java.lang.RuntimeException: Handler (android.os.Handler) {41388638} sending message to a Handler on a dead thread
.
내가 콜백 내에서 호출하는 경우 :
04-11 15:49:52.554: E/ActivityThread(32595): Service app.LicenseService has leaked ServiceConnection [email protected] that was originally bound here
이해가 안이 하나. 나는 이것이 유료 버전을 관리하는 꽤 일반적인 방법이라고 생각합니다. 사람들이 여기에서 라이프 사이클을 어떻게 관리 했습니까? 감사!