【发布时间】:2015-12-01 23:39:00
【问题描述】:
我正在使用 LiveSDK for Onedrive 登录。它正在工作,但在签名页面和授权页面上的旋转设备上显示警告。
Activilty 泄露了原本添加在这里的窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@42acff18......
代码如下
class SigninActivity extends Activity implements LiveAuthListener {
private LiveAuthClient signinauth;
public LiveConnectClient client;
private boolean signin = false;
public static final String[] SCOPES = {
"wl.signin",
"wl.basic",
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
}
@Override
public void onResume() {
super.onResume();
if (this.signinauth == null) {
this.signinauth = new LiveAuthClient(this, LiveSdkContants.CLIENT_ID);
this.signinauth.login(this, Arrays.asList(SCOPES), this);
}
if (signin) {
System.out.println("Authorization Success");
finish();
}
}
public void onDestroy() {
super.onDestroy();
}
public void onAuthComplete(LiveStatus status, LiveConnectSession session, Object userState) {
if (status == LiveStatus.CONNECTED ) {
System.out.println("Connected");
signin = true;
client = new LiveConnectClient(session);
finish();
} else {
client = null;
signin = false;
finish();
}
}
public void onAuthError(LiveAuthException exception, Object userState) {
client = null;
System.out.println("Connection failed");
this.finish();
}
我该如何解决这个问题?
Activity 泄露了最初添加在这里的窗口 com.android.internal.policy.impl.PhoneWindow$DecorView@41d3cf88 在 android.view.ViewRootImpl.(ViewRootImpl.java:402) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:311) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) 在 android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) 在 android.view.Window$LocalWindowManager.addView(Window.java:554) 在 android.app.Dialog.show(Dialog.java:277) 在 com.microsoft.live.AuthorizationRequest.execute(AuthorizationRequest.java:344) 在 com.microsoft.live.LiveAuthClient.login(LiveAuthClient.java:504) 在 com.microsoft.live.LiveAuthClient.login(LiveAuthClient.java:427) 在 com.onedrive.SigninActivity.onResume(SigninActivity.java:303) 在 android.support.v4.app.Fragment.performResume(Fragment.java:1832) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:995) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120) 在 android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1939) 在 android.support.v4.app.FragmentActivity.onResumeFragments(FragmentActivity.java:447) 在 android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:436) 在 android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:138) 在 android.app.Activity.performResume(Activity.java:5293) 在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:2606) 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2644) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2130) 在 android.app.ActivityThread.access$600(ActivityThread.java:140) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4898) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 在 dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
我建议您在您的应用程序上安装 Leakcanary 并查看内存泄漏发生的位置。这是 github 链接:github.com/square/leakcanary
-
请提供您的堆栈跟踪 logcat 以强制关闭
-
此 onedrive 登录是否会打开一个关于您的活动的新对话框? Bcoz 当您更改方向时,活动将被销毁并再次创建……关联的上下文对象也是如此。上下文用于将视图与活动相关联。
-
我添加了堆栈跟踪。我的理解是来自 LiveSDK 库的登录和授权对话框。我们如何才能关闭它?