169 похожих чатов

Всем привет! Есть такой код для Андроида: public Func<string, Task<string>> EvaluateJavascript {

get { return (Func<string, Task<string>>)GetValue(EvaluateJavascriptProperty); }
set { SetValue(EvaluateJavascriptProperty, value); }
}

internal class JavascriptResult : Java.Lang.Object, IValueCallback
{
private Action<string> _callback;
public JavascriptResult(Action<string> callback)
{
_callback = callback;
}

public void OnReceiveValue(Java.Lang.Object result)
{
_callback?.Invoke(Convert.ToString(result));
}
}

protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
....
var webView = e.NewElement as NewWebView;

webView.EvaluateJavascript = async (js) =>
{
var reset = new ManualResetEvent(false);
var response = string.Empty;

Device.BeginInvokeOnMainThread(() =>
{
Control?.EvaluateJavascript(js, new JavascriptResult((r) =>
{
response = r;
reset.Set();
}));
});
await Task.Run(() => { reset.WaitOne(); });
return response;
}
.....
}

Все работает, но иногда приложение падает. Вот такая информация:

Fatal Exception: android.runtime.JavaProxyThrowable: System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'Android.Webkit.WebView'.
at Java.Interop.JniPeerMembers.AssertSelf (Java.Interop.IJavaPeerable self) [0x00029] in <8b3b636835d84984ba4604c1f57b1983>:0
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00000] in <8b3b636835d84984ba4604c1f57b1983>:0
at Android.Webkit.WebView.EvaluateJavascript (System.String script, Android.Webkit.IValueCallback resultCallback) [0x00050] in <84ca7e914f6148f0b961431a9ac4287b>:0
at Wrapping.Android.NewWebViewRenderer+<>c__DisplayClass7_0.<OnElementChanged>b__1 () [0x0003a] in <2ffd7f4aee294156b136af0874bc6181>:0
at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <84ca7e914f6148f0b961431a9ac4287b>:0
at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <84ca7e914f6148f0b961431a9ac4287b>:0
at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.71(intptr,intptr)
at mono.java.lang.RunnableImplementor.n_run(RunnableImplementor.java)
at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6196)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)

6 ответов

9 просмотров

Вероятно какой-то метод дёргается после закрытия страницы

Андрей- Автор вопроса
Kirill Ashikhmin
Вероятно какой-то метод дёргается после закрытия с...

Да, причём сложно отловить когда приложение "падает".

Андрей
Да, причём сложно отловить когда приложение "падае...

Ну отлавливай когда в OnElementChanged NewElement == null, отменяй подписки, сохраняй флаги и не выполняй действий с вьюхой после этого

Андрей- Автор вопроса
Андрей
"Падает" в основном потоке.

Ну логично. Обращение к вьюхе идёт же

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта