我使用WebView在我们的某个应用程序的活动中显示一些互联网内容.
问题是,当用户切换到此活动时,WebView的线程会继续运行!
有问题的线程是:
Thread [<17> WebViewCoreThread] (Running)
Thread [<25> CookieSyncManager] (Running)
Thread [<19> http0] (Running)
Thread [<29> http1] (Running)
Thread [<31> http2] (Running)
Thread [<33> http3] (Running)
Run Code Online (Sandbox Code Playgroud)
暂停这些线程中的每一个,并检查它正忙于做什么:
Thread [<17> WebViewCoreThread] (Suspended)
Object.wait(long, int) line: not available [native method]
MessageQueue(Object).wait() line: 288
MessageQueue.next() line: 148
Looper.loop() line: 110
WebViewCore$WebCoreThread.run() line: 471
Thread.run() line: 1060
Thread [<25> CookieSyncManager] (Suspended)
Object.wait(long, int) line: not available [native method]
MessageQueue(Object).wait(long) line: 326
MessageQueue.next() line: 144
Looper.loop() line: 110
CookieSyncManager(WebSyncManager).run() line: 90
Thread.run() line: 1060 …Run Code Online (Sandbox Code Playgroud) 我正在研究在cordova上开发的移动应用程序.我想实现一个后台服务,它做一些工作,比如打开套接字连接同步本地数据库和远程服务器,并通知用户新的远程推送等.关键是我在javascript中实现了这个代码,但我想在后台执行它.
我在互联网上搜索了一个cordova后台服务插件.
我认为最好的是红色文件夹,但它只适用于Android,它不允许我编写javascript以在后台执行.但只是在java和javascript之间交换json.
我已经阅读了一些关于android中后台服务的主题,这些是我发现的有用的:
所以我开始编写cordova插件(主要是在android上)来在后台执行javascript代码.我从后台服务创建了一个webview来执行它的javascript.这在我执行普通的javascript时工作正常但是当涉及到cordova插件时,它失败了,例如设备device.uuid给出的null.
这是java服务代码:
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "My Happy Service Started", Toast.LENGTH_LONG).show();
createBackGroundView();
super.onStart(intent,startId);
}
public void createBackGroundView(){
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutParams params = new WindowManager.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 200;
params.height = 200;
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new RelativeLayout.LayoutParams( …Run Code Online (Sandbox Code Playgroud) 任何人都可以向我解释keepRunning如何在Android的config.xml中工作.
我的意思是,我不想知道如何编写指令,但它是如何工作的,它如何影响Android应用程序的执行?它是否在后台创建服务?
如果有人能找到我们可以看到它如何工作的来源,那将是伟大的
谢谢.
编辑:我尝试分析生成的代码,分析Android设置中的RAM,服务和进程.而我的结论是.....什么都不做.如果您尝试使用GPS制作跟踪用户的应用,请不要使用Cordova.要正确跟踪用户,您需要使用START_STICKY选项创建服务.所以,它是在本机代码中.你失去了对CrossPlatform的兴趣,因为你必须为所有平台重新编码服务,在我看来,Native Service和Cordova App之间的通信并不容易.
在结论中,如果你使用Cordova,你必须知道你不能使用所有原生的力量,你必须做出选择: - 简单的dev(主观)和crossplaform(真正的跨平台?)和 - 本机开发与它的力量和没有兼容性问题,但您必须为一个平台制作一个应用程序