Встроенный Crosswalk увеличивает выделенную память на Android

У меня есть несколько веб-приложений, которые я хочу запускать через веб-просмотр в собственном приложении для Android. В настоящее время я встраиваю браузер пешеходного перехода и загружаю в него приложения. Он отлично работает для некоторых веб-приложений, но по мере увеличения размера веб-приложения я получаю ошибки, которые приводят к сбою моего приложения для Android.

Вещи, которые я пробовал:

  • android:largeHeap="true" - помог мне запустить более крупные веб-приложения.
  • android:hardwareAccelerated="true" - помог мне повысить производительность.
  • xwalk-command-line='--ignore-gpu-blacklist' в assets/xwalk-commandline - также помогает

Есть еще некоторые веб-приложения (созданные с помощью Unity), которые требовали от меня выделения около 1 Гб, когда я создавал их для тестирования на рабочем столе. Я буду использовать это приложение для Android на новейших телефонах, и меня устроит такое большое использование памяти.

Это работает, если я пытаюсь открыть это приложение в настольном браузере, поэтому я думаю, что это проблема распределения памяти. Я использую crosswalk 17 с включенным webGL, а небольшие приложения отлично работают с webgl.

У меня есть несколько вопросов:

  1. Есть ли способ заставить встроенный браузер crosswalk выделить себе 1 ГБ памяти. (Я знаю, что это раздавит мое устройство и, вероятно, не очень хорошо, но, пожалуйста, побалуйте меня)
  2. Могу ли я расширить использование памяти моего приложения за пределы largeHeap. Если да, то как? И нужно ли мне это делать, чтобы включить такие большие веб-приложения?
  3. Есть ли какие-либо проблемы, которые я упускаю, которые, возможно, маскируют настоящие проблемы здесь.
  4. Я знаю, что этот тип приложений будет работать только на новейших моделях телефонов. каковы последствия для приложения с таким высоким использованием памяти?
  5. Есть ли какие-либо другие возможности, которые я должен изучить, чтобы позволить мне запускать большие веб-приложения в приложении для Android?

Вот ответы на часто задаваемые вопросы пользователей, использующих переполнение стека :)

Xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mycompany.myproject.webapplicationActivity">


    <org.xwalk.core.XWalkView
        android:id="@+id/xwalkWebView"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#000000"
        />    
</RelativeLayout>

Активность при создании:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webapplicationActivity);

    xWalkWebView=(XWalkView)findViewById(R.id.xwalkWebView);

    // turn on debugging
    XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
    xWalkWebView.setKeepScreenOn(true);
    xWalkWebView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
    String urlToBeLoaded = "http://www.google.com";

    Bundle bundle = getIntent().getExtras();
    if (savedInstanceState == null) {
        Bundle extras = getIntent().getExtras();
        if(extras == null) {
            Log.i(TAG,"error in reading extras");
        } else {
            urlToBeLoaded = extras.getString("url");
        }
    }
    xWalkWebView.load(urlToBeLoaded, null);

Разрешения

* Для пешеходного перехода требуется много из них, а я использую остальные. Но, возможно, здесь есть конфликт.

 <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Журнал ADB

GL  : validate_display:255 error 3008 (EGL_BAD_DISPLAY)
02-17 18:11:55.862 23023 23023 W art     : Attempt to remove non-JNI local reference, dumping thread
02-17 18:11:55.903  4335  4448 I ActivityManager: Displayed com.mycompany.myProject/.GamePlayActivity: +464ms
02-17 18:11:55.904 23023 23023 W cr.BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 23023
02-17 18:11:55.904 22463 22463 I Keyboard.Facilitator: onFinishInput()
02-17 18:11:55.931 23023 23023 E chromium: [ERROR:layer_tree_host_impl.cc(2121)] Forcing zero-copy tile initialization as worker context is missing
02-17 18:11:55.980  4335  4448 I WindowManager: Screen frozen for +541ms due to Window{f87dd7b u0 com.mycompany.myProject/com.mycompany.myProject.GamePlayActivity}
02-17 18:11:57.987  4335  4448 I art     : Starting a blocking GC Explicit
02-17 18:11:58.205  4335  4448 I art     : Explicit concurrent mark sweep GC freed 12393(780KB) AllocSpace objects, 5(100KB) LOS objects, 23% free, 52MB/68MB, paused 1.298ms total 216.765ms
02-17 18:11:58.206  4335 15896 W InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@3b6394f attribute=null, token = android.os.BinderProxy@d44f10a
02-17 18:11:58.726 23023 23023 I chromium: [INFO:CONSOLE(1)] "Decompressed Release/StuntRunner_WebGL.memgz in 254ms. You can remove this delay if you configure your web server to host files using gzip compression.", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:11:59.103 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:11:59.663 23023 23023 I chromium: [INFO:CONSOLE(1)] "Decompressed Release/StuntRunner_WebGL.jsgz in 853ms. You can remove this delay if you configure your web server to host files using gzip compression.", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:11:59.985 23023 23023 I chromium: [INFO:CONSOLE(1)] "optimizing out Math.fround calls", source: https://<source>/Release/UnityLoader.js (1)
02-17 18:12:00.103 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:01.104 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:02.105 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:03.105 22037 22037 I ServiceManager: Waiting for service AtCmdFwd...
02-17 18:12:03.174  4335 22386 D NetlinkSocketObserver: NeighborEvent{elapsedMs=775340136, 192.168.1.1, [100D7F6DFA6E], RTM_NEWNEIGH, NUD_REACHABLE}
02-17 18:12:04.106 22037 22037 W Atfwd_Sendcmd: AtCmdFwd service not published, waiting... retryCnt : 5
02-17 18:12:10.387  4335  6452 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ], android.os.BinderProxy@82c1e86)
02-17 18:12:10.392  4335  6549 I ActivityManager: Process com.instagram.android (pid 14465) has died
02-17 18:12:10.409  4335  5621 D ConnectivityService: releasing NetworkRequest NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 18:12:10.504  4335  5621 E ConnectivityService: RemoteException caught trying to send a callback msg for NetworkRequest [ id=842, legacyType=-1, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN] ]
02-17 18:12:10.781 23023 23263 F libc    : Fatal signal 4 (SIGILL), code 1, fault addr 0xd3781358 in tid 23263 (Chrome_InProcRe)
02-17 18:12:10.886  3293  3293 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
02-17 18:12:10.887  3293  3293 F DEBUG   : Build fingerprint: 'google/angler/angler:6.0.1/MMB29P/2473553:user/release-keys'
02-17 18:12:10.887  3293  3293 F DEBUG   : Revision: '0'
02-17 18:12:10.887  3293  3293 F DEBUG   : ABI: 'arm'
02-17 18:12:10.887  3293  3293 F DEBUG   : pid: 23023, tid: 23263, name: Chrome_InProcRe  >>> com.mycompany.myProject <<<
02-17 18:12:10.887  3293  3293 F DEBUG   : signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xd3781358
02-17 18:12:10.933  3293  3293 F DEBUG   :     r0 d5366044  r1 40005000  r2 0855d000  r3 02182000
02-17 18:12:10.933  3293  3293 F DEBUG   :     r4 d5366044  r5 40000000  r6 00000000  r7 00000000
02-17 18:12:10.933  3293  3293 F DEBUG   :     r8 40005000  r9 d66d4050  sl 40000000  fp d66bee10
02-17 18:12:10.934  3293  3293 F DEBUG   :     ip f70ff624  sp d66bed40  lr d3dfa5e1  pc d3781358  cpsr 80030030
02-17 18:12:10.938  3293  3293 F DEBUG   : 
02-17 18:12:10.938  3293  3293 F DEBUG   : backtrace:
02-17 18:12:10.926  3293  3293 W debuggerd: type=1400 audit(0.0:9681): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=1150 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
02-17 18:12:10.938  3293  3293 F DEBUG   :     #00 pc 001e3358  /data/app/com.mycompany.myProject-1/lib/arm/libxwalkcore.so
02-17 18:12:10.938  3293  3293 F DEBUG   :     #01 pc 0085c5dd  /data/app/com.mycompany.myProject-1/lib/arm/libxwalkcore.so
02-17 18:12:11.276  3293  3293 W debuggerd: type=1400 audit(0.0:9682): avc: denied { read } for name="kgsl-3d0" dev="tmpfs" ino=1150 scontext=u:r:debuggerd:s0 tcontext=u:object_r:gpu_device:s0 tclass=chr_file permissive=0
02-17 18:12:11.817  4335 23497 W ActivityManager:   Force finishing activity com.mycompany.myProject/.GamePlayActivity
02-17 18:12:11.818  3293  3293 F DEBUG   : 
02-17 18:12:11.818  3293  3293 F DEBUG   : Tombstone written to: /data/tombstones/tombstone_05
02-17 18:12:11.818  3293  3293 E DEBUG   : AM write failed: Broken pipe
02-17 18:12:11.890  4335 22149 I OpenGLRenderer: Initialized EGL, version 1.4
02-17 18:12:11.987  4335  5717 D GraphicsStats: Buffer count: 4
02-17 18:12:11.989  4335  5980 I WindowState: WIN DEATH: Window{def3a97 u0 com.mycompany.myProject/com.mycompany.myProject.LibraryActivity}
02-17 18:12:11.994  4335  5709 I WindowState: WIN DEATH: Window{9ffe3af u0 com.mycompany.myProject/com.mycompany.myProject.LoginActivity}
02-17 18:12:11.996  4335  4351 I WindowState: WIN DEATH: Window{ee84425 u0 com.mycompany.myProject/com.mycompany.myProject.GameDescriptionActivity}
02-17 18:12:11.999  4335  7252 I WindowState: WIN DEATH: Window{a09b55b u0 SurfaceView}
02-17 18:12:12.001  4335  5717 I WindowState: WIN DEATH: Window{f87dd7b u0 com.mycompany.myProject/com.mycompany.myProject.GamePlayActivity}
02-17 18:12:12.022  3309  3309 I Zygote  : Process 23023 exited due to signal (4)
02-17 18:12:12.024  4335 28075 I ActivityManager: Process com.mycompany.myProject (pid 23023) has died
02-17 18:12:12.073  4335 28075 I ActivityManager: Start proc 23507:com.mycompany.myProject/u0a179 for activity com.mycompany.myProject/.GameDescriptionActivity
02-17 18:12:12.076 23507 23507 I art     : Late-enabling -Xcheck:jni

Заранее спасибо!


person alex_milhouse    schedule 18.02.2016    source источник
comment
Для справки, версия 17 пешеходного перехода — это версия 46 хрома. com/crosswalk-project/crosswalk-website/wiki/   -  person alex_milhouse    schedule 18.02.2016
comment
нет, я не думаю, что вы можете просто настроить пешеходный переход для использования любого объема памяти, который вы хотите - у других людей были аналогичные проблемы с определенными устройствами - github.com/AppGyver/steroids/issues/698   -  person Tasos    schedule 18.02.2016
comment
Кстати, вы упомянули, что в десктопном браузере все нормально. Вы пробовали мобильный браузер Chrome ?? потому что, если это сработает, вы мало что можете сделать, кроме как просмотреть свой код.   -  person Tasos    schedule 18.02.2016
comment
Одно из самых крупных веб-приложений, которое не работает в приложении для Android, работает в мобильном браузере Chrome. Но самое большое из веб-приложений (1 гб) тоже не работает.   -  person alex_milhouse    schedule 18.02.2016
comment
1 гига многовато. сколько времени это займет, чтобы загрузить в любом случае. большинство современных мобильных телефонов имеют максимум около 1 ГБ памяти. более дорогие имеют от 2 до 4. Поэтому распределение памяти на мобильном телефоне очень важно, иначе приложения, работающие в фоновом режиме, начнут зависать или замедляться. Я предлагаю поднять вопрос на Github, чтобы узнать, как распределение памяти работает с Crosswalk и каков максимум, который он может использовать, прежде чем у вас начнутся проблемы.   -  person Tasos    schedule 18.02.2016
comment
Спасибо. Да, я знаю, что смогу работать только на очень хороших телефонах. Думал может есть способ и от Андроида. Просто опубликовать в своем основном проекте на github? Я попробую это и сообщить!   -  person alex_milhouse    schedule 19.02.2016


Ответы (1)


У меня была такая проблема. Я думал, что эта проблема возникла из-за рекламы, такой как AdSense, или что-то пошло не так с JavaScript.

Пытаться

 xwalk Release 'org.xwalk:xwalk_core_library:21.51.546.7'

Я надеюсь, что это поможет вам

person ahmmed    schedule 16.02.2019