2012-12-20 4 views
8

आग लगाना बंद करें मैं उस एप्लिकेशन पर काम कर रहा हूं जिसे ऐप जावास्क्रिप्ट चलाने की आवश्यकता है जब ऐप अग्रभूमि में नहीं है; समस्या यह प्रतीत होती है कि जब ऐप को पृष्ठभूमि में रखा जाता है/वेबव्यू स्क्रीन से अलग किया जाता है तो वेबव्यू के ऑन पॉज़ विधि को कॉल किया जाता है जो प्रति दस्तावेज़ निम्नलिखित करता है: "इस वेबव्यू और उसके संबंधित डॉम से जुड़े किसी भी अतिरिक्त प्रसंस्करण को रोकता है, प्लगइन्स, जावास्क्रिप्ट आदि "पृष्ठभूमि में ऐप पर ओएस/रन जावास्क्रिप्ट द्वारा रोके जाने पर एंड्रॉइड वेबव्यू फिर से शुरू करें?

जो मैंने पाया है, उससे अब तक मेरी सबसे अच्छी शर्त वेबव्यू की "ऑनस्यूम" विधि को कॉल करने के लिए प्रतिबिंब का उपयोग कर रही है, जो इन सभी प्रक्रिया निलंबन को पूर्ववत करनी चाहिए। मेरे वर्तमान कार्यान्वयन के साथ मुझे कहा गया विधि का एक उदाहरण मिलता है, लेकिन जब कुछ भी नहीं किया जाता है तब भी ऐसा नहीं होता है क्योंकि मेरी अगली जावास्क्रिप्ट कॉल कुछ भी नहीं करती है (ध्यान दें कि यह तब काम करता है जब मेरे पास एप्लिकेशन खुले और अग्रभूमि में होता है)।

किसी और को कोई समस्या दिखाई दे रही है या मेरे ऐप को लॉन्च करने का कोई समाधान है जब आपका ऐप पूरी तरह से ऐप लॉन्च किए बिना पृष्ठभूमि में है?

Intent intent = new Intent("some action"); 
intent.putExtra("xtifyJson", xtifyJSON.toString()); 
context.sendBroadcast(intent); 

मेरी प्रसारण रिसीवर के onReceive है, जो हमेशा पृष्ठभूमि में चल रहे सेवा में रहती है में:

पुश संदेश कह जावास्क्रिप्ट पृष्ठभूमि में चल सेवा को सूचित करने के लिए भेजा जाता है तो आशय भाग गया करने की आवश्यकता है में आता है

final String stringArrayExtra = intent.getStringExtra("xtifyJson"); 
if (!Text.isNull(stringArrayExtra)) { 

    new Handler(context.getMainLooper()).post(new Runnable() { 

      @Override 
      public void run() { 
      try { 
       Log.d("Hey Dev Guy", "Message received"); 
       JavaScriptInterface javaScriptInterface = ((SpecialApplication) getApplicationContext()).getJavaScriptInterface(); 
       relectHiddenMethod(javaScriptInterface.getParentWebView(), "onResume"); 
       javaScriptInterface.getParentWebView().resumeTimers(); 
       javaScriptInterface.callBackPushReceived(new JSONObject(stringArrayExtra)); 

      } 
      catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      } 
     } 
    }); 

} 

reflectHiddenMethod प्रतिबिंब विधि:

private void reflectHiddenMethod(final WebView webview, final String name) { 

    if (webview != null) { 
     try { 
      Method method = WebView.class.getMethod(name); 
      Object invoke = method.invoke(webview); 
     } 
     catch (final Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

कुछ हद तक वास्तविक [प्रश्न] (http://stackoverflow.com/questions/7884568/android-webview-inside-a- सेवा)। मुख्य विचार - जावास्क्रिप्ट से संचार सेवा को एक सेवा में ले जाएं। – Stan

उत्तर

1

दुर्भाग्य से यह काम नहीं करेगा। एक वेब व्यू एक यूआई घटक है और इस प्रकार खिड़की से जुड़ा होना चाहिए। इस बारे में StackOverflow पर यहां अन्य संदर्भ दिए गए हैं: Android webview inside a service?

वेबव्यू की आवश्यकता के बिना आपके कोड को निष्पादित करने के लिए वैकल्पिक जावास्क्रिप्ट पुस्तकालयों में एक संभावना होगी, उदा। राइनो, वी 8, या स्पाइडरमोनकी।

लेकिन शायद सबसे अच्छा समाधान जावा में आपके पुश मैसेजिंग को लागू करना होगा।

+0

हां, एक बार जब आप पृष्ठभूमि में ऐप्स को जावास्क्रिप्ट चलाते हैं, तो आप डिवाइस को किसी भी उपयोग के लिए डिवाइस को धीमा करने के अपने तरीके पर अच्छे होते हैं। –

+0

क्या आप कोई संदर्भ दे सकते हैं? बिना किसी समस्या के वेबव्यू को अलग किया जा सकता है और खिड़की से जोड़ा जा सकता है –

संबंधित मुद्दे