Android 主活动实例有时会引发运行时异常“;LinphoneActivity尚未实例化;
我使用Linphone库制作了一个应用程序,我有一个代码可以在MainActivity中引发异常,如下所示:Android 主活动实例有时会引发运行时异常“;LinphoneActivity尚未实例化;,android,runtimeexception,linphone,Android,Runtimeexception,Linphone,我使用Linphone库制作了一个应用程序,我有一个代码可以在MainActivity中引发异常,如下所示: private static MainActivity instance; public static final boolean isInstanciated() { return instance != null; } public static final MainActivity instance() { if (instance != null) {
private static MainActivity instance;
public static final boolean isInstanciated() {
return instance != null;
}
public static final MainActivity instance() {
if (instance != null) {
return instance;
}
throw new RuntimeException("LinphoneActivity not instantiated yet");
}
方法实例将用于另一个活动(IncomingCallActivity和Contact Data活动)
如果有来电,则将启动来电活动
if (!LinphoneManager.getInstance().acceptCallWithParams(mCall, params)) {
// the above method takes care of Samsung Galaxy S
Toast.makeText(this, R.string.couldnt_accept_call, Toast.LENGTH_LONG).show();
} else {
if (!MainActivity.isInstanciated()) {
return;
}
final LinphoneCallParams remoteParams = mCall.getRemoteParams();
if (remoteParams != null && remoteParams.getVideoEnabled() && LinphoneManager.getInstance().isAutoAcceptCamera()) {
MainActivity.instance().startVideoActivity(mCall);
} else {
MainActivity.instance().startIncallActivity(mCall);
}
}
如果用户选择“联系人”菜单,ContactDataActivity将启动
private void doCall(String number) {
Log.d(TAG, "try to call here: " + number);
if (Account.isPrepaidRegistered()) {
MainActivity.instance().requestToCall(number);
} else {
Intent intent = new Intent(ContactDataActivity.this, PrepaidRegisterActivity.class);
startActivity(intent);
}
}
其中,每个活动都需要调用MainActivity的实例来调用MainActivity中的方法来请求call或incall
运行应用程序时,logcat将显示:
java.lang.RuntimeException:尚未实例化LinphoneActivity
这很正常,还是我的代码有问题?不要尝试自己实例化一个活动android框架会为您这样做,如果您希望您的活动是单例的,请在您的意图过滤器中使用lauchmodes而不是单例设计模式lauchMode上有很多很好的教程,和在另一个活动(传入调用活动)中调用
instance()
method?如下所示:if(!MainActivity.isInstanced()){return;}final LinphoneCallParams remoteParams=mCall.getRemoteParams();如果(remoteParams!=null&&remoteParams.getVideoEnabled()&&LinphoneManager.getInstance().isAutoAcceptCamera()){MainActivity.instance().startVideoActivity(mCall);}其他{MainActivity.instance().startIncallActivity(mCall);}我已经将其放在清单文件中:android:launchMode=“singleTask”,所以我必须删除MainActivity instance()方法?是的,如果单个任务是您试图实现的,但我需要在另一个活动中调用此instance()方法,你能给出另一个解决方案吗?发布所有相关代码并解释你想要实现的目标…如果你试图在活动之间进行通信,请使用本地广播接收器或一些共享数据