DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: haibei
今日帖子: 7
在线用户: 7
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 5:56:29
标题:
我的第一个测试 Android 应用程序 BOOT COMPLETED + SERVICE Android - Android Studio 浏览:461
加入我的收藏
楼主: 我的第一个测试 Android 应用程序 BOOT COMPLETED + SERVICE Android

Android Studio 2023 tests

now it's so easy do it in Delphi FMX

1)在JAVA中创建一个“SERVICE”来调用Android BOOT COMPLETED

2) 服务在“后台”运行,即使应用程序未运行或位于前台

3) 即使智能手机被用户启动或用户按下屏幕关闭按钮,服务仍在工作

4) 服务仍在运行,即使用户随时重新激活智能手机上的应用程序,线程也会继续运行并计算值

5)用户可以随时停止服务

6) 我的服务仅运行 1x(我为测试设置了执行控制) - 因此,如果它正在运行,则不会执行任何线程

7) 我的服务只运行 1 个线程 -> 计数到 1000.... counter++ ... Sleep(1000);

----------

1) Creating a "SERVICE" in JAVA to call on Android BOOT COMPLETED

2) Service running in "Background", even if the app is not running, or is in foreground

3) The service is still working even if the smartphone is booted by the user or the user presses the screen off button

4) The service is still running, even if the user reactivates the app on the smartphone at any time, the thread keeps running and counting the values

5) The user can stop the service at any time

6) My service runs only 1x (I put a run control for testing) - So if it's running it doesn't do anything and

7) My service runs 1 thread -> counting to 1000.... counter++ ... Sleep(1000);

Link video 29.11MBytes

https://mega.nz/file/mmJkFYZB#4BclJOwbqfCLFqVgozAAAP16DU-nsNlmFhnGycCrZLw

....
此帖子包含附件:
PNG 图像
大小:665.7K
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/27 6:31:48
1楼: @emailx45 (emailx45) mega.nz,我打不开,是delphi的例程吗?有没有Delphi例程,Delphi写的程序怎么做到息屏后程序还在运行?
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 7:02:35
2楼: @hq200306

This a VIDEO where I show that it's possible do it 
Im using Android Studio 2023

In Delphi will be very easy like in Android Studio
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/27 7:09:15
3楼: @emailx45 (emailx45) 写个Delphi例程发上来,我测试一下
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 7:12:07
4楼: RAR in zip  part1
此帖子包含附件:emailx45_20238277120.zip 大小:12.00M
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 7:13:19
5楼: RAR in zip  part2
此帖子包含附件:emailx45_202382771313.zip 大小:9.45M
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/27 7:21:46
6楼: @emailx45 (emailx45) 有没有delphi例程?息屏后,安卓程序怎么能保证运行?
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 8:08:17
7楼: Let's consider the following:

1) that your application and your service do not compromise the system and will not cause any risk to the system;

2) your application and service have the proper privileges to run on the system;

3) your application and service can catch exceptions that may appear in your code;

4) your application and service can be disabled gracefully, ie as it should be;

etc..

So you could still have your application or service terminated by the operating system, for example:

1) your application or service has stopped responding to the operating system, the messages are no longer processed, so Android understands that it has stopped, and simply "kills it";

2) your application or service is executing one or more tasks that take a long time, so Android thinks it has stopped, and "kills it";

3) no more resources on the system (mainly memory), so Android "kills him";

etc....

When terminated abruptly or deliberately by Android, in some cases your application or service may not be automatically invoked by Android at another time. Then the user will have to run the application or service again. In some specific cases this can happen... see more above.

Now, if your app or service is properly coded, error free, etc... and the device where it's running has spare resources, then the chance of everything working is almost 100%, no more than that!
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 8:27:16
8楼: Basically, you must observe the following conditions:

1) your application or service must not execute tasks in the "main thread", equally in any programming language;
The "main-thread" or UI, must be exclusive to show information, user entries, etc... no long tasks and unprotected against bugs!

2) every service must run in parallel processing, that is, in an environment for secondary threads. Thus, you should always create a new thread for your tasks, leaving the "main-thread" for your application.

3) The Android system, in particular, determines a very short time to understand that an application or service is stopped, normally it is 10ms. If this is not possible, then you may get an "ANR" - Application Not Responsible message -- just like the MS Windows message that the application is unresponsive!
However, on Android, the task will be killed immediately.
However, the intensive use of processing, for example, with graphs, databases, etc... must be well designed so as not to cause this type of situation.

4) On Android, a "service" or a "receiver" has basically the same weight in relation to its call. So, you shouldn't create a procedure that takes too long, or that might cause too much waiting, otherwise it might get killed by Android.

5) on Android, starting from edition 11+, you cannot run a service from an application that is in the "background", therefore, you will have to use some non-conventional techniques for that, such as: Job scheduler.

But it is possible to call a service even if your application is in "background", as is the case with "BOOT".
Here, the technique is to call the service in "BACKGROUND", and then in "FOREGROUND"... Thus, the service will not be killed, as is done by Android if it does not receive a response within 10ms.

6) every service that runs in "background" must have the "Service in Foreground" permission in its Manifest.

7) for your application to run in the "BOOT" of the system, it must have the "BOOT_COMPLETED" permission in its Manifest.

8) for your app to run on "BOOT", you must have your "RECEIVER" duly noted in your Manifest, otherwise Android doesn't know anything about it, and it won't run.

9) finally, there are some other observations necessary according to each use case, so a lot of testing is needed before putting everything into production, that is, for actual use.
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 8:36:21
9楼: For those who still don't understand what a "Thread" is, I'll try to explain it in my own way to make it easier to understand:

1) Every application (software in general) runs in a process in the operating system;

2) a "process" is a "thread", that is, it runs in a reserved and exclusive space in your operating system (in memory)

3) this way, when you create a "new thread", you are, in fact, creating "a new application (software)", basically.

4) if you are creating a new app within your app, then it means you should pay more attention from now on, because these two apps are (usually) closely linked, and that's why we can cause so many problems when one or the other application ends abruptly (uncontrolled).

5) When you create "anonymous threads", you are delegating some tasks to the operating system, however, this does not guarantee that if there is an error in your thread, the operating system will take care of your main application to continue working. No! You are responsible for control, so you suffer the consequences of mistakes.

6) As such, always remember that you, and only you, are responsible for the proper termination of your threads (secondary applications) within your main application.

Observation:  
O Delphi, in fact, dont create the "threads", no! no! no! -- it ask to operational system create it!

See the source code (the interfaces calls ) and see the MSWindows, Posix do it.... 



Information that cannot be ignored, and should be used as a rule:

Never use a background thread to communicate (read or change) visual information.

Someone might say "YES", you can do it!

OK, you can even do that, however, you are breaking an essential rule for the proper functioning of your application, and, in the case of services (which are applications that must run exclusively in the background), you are digging your grave , and you will be buried with no friends to watch or cry for you!

So, be careful:
1) if you want the information to be shown on the screen, use threads in the background (parallel) - always synchronizing with your application's main-thread , but with caution in this part when updating your screen; Try to send updates from time to time, so as not to take the time necessary for your application to continue its tasks properly, without stuttering or freezing.

2) if you want the service to send the information to be shown on the screen, use some kind of means, such as sending information through TCP/IP messages, or any other means of the operating system. NEVER DIRECTLY, otherwise everything will explode right away.

.
此帖子包含附件:
PNG 图像
大小:27.4K
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/27 8:57:05
10楼: 能不能写个delphi例程,我测一下,息屏后还在运行?
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 8:57:58
10楼: Basically, you will need the following to create your service and use the Android boot:

0) create your application to inform the appropriate information in the Android Manifest file;

1) Create a service, of course!
1.1) be careful not to create a monster... be careful otherwise you will crash your device or just take too long to boot!

2) Every Android app will need permissions, for example:
BOOT_COMPLETED, FOREGROUND_SERVICE, and others you need...

3) every application must inform the "BROADCASTRECEIVER" that will be used to receive the boot messages, or any other necessary messages.
3.1) Then, you will have to create your "BroadcastReceiver" class so that it calls your "Intent" that will start your service;
3.2) so, you must inform in the Manifest file, which information is expected by your "BroadcastReceiver"

4) in summary:
4.1) Create an Android application
4.2) Create an Android service
4.3) Set the required permissions in your Android app's Manifest file
4.4) Define your "BroadcastReceiver" in your Android app's Manifest file
4.5) run the tests until everything is working as expected...
4.6) DO NOT CREATE THREADS THAT TAKE A LONG TIME TO RUN YOUR TASKS - BE VERY CAREFUL HERE - ANDROID WAIT UP TO 10ms FOR A RESPONSE AND KILLS ANY TASKS THAT DO NOT RESPOND.
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 hq200306 (200306) ★☆☆☆☆ -
普通会员
2023/8/27 9:04:12
11楼: 1、自启动我做过,现在我问的问题不是自启动的功能。
2、我试了没有插电情况,息屏后安卓程序一会就停了,如果插充电器情况,安卓程序可以一直运行。
3、我想,在没插电情况,怎么做到息屏后,安卓程序保持一直运行?包括网 络可以正常访问.
4、能提供一个delphi的android测试例子我来测试一下。
----------------------------------------------
-
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 9:07:09
11楼: There is no magic formula for all Android editions, that is, you will need to keep up with updates from the official "Android Developers" website.

For example, starting from API level 26, it is no longer accepted to run a service in "background" if the application is in "background".
So your app must be in "foreground". Here, it is a problem for use in "Boot", because, during the "boot" of Android, your application will be closed or in "background" (in a waiting state in memory or in the cache, however, it is not active or in "foreground")...

So, starting from API level 26, you must call a service in "Foreground" and then in "Background", if your application is in "background"!

In other editions of API level < 26, you should read the official docs to understand how you should go about calling services in "background", when your application is also in "background".

An application in "Foreground" can run a service in "background or foreground". But the opposite is more accepted!
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 9:10:52
12楼: @hq200306

As I said above, there are situations where Android kills your service or application and "DOES NOT AUTOMATICALLY RUN AGAIN", that is, you (user) must run your service or application again, so that it continues and runs in other situations, such as "booting" again.

This happens for reasons I mentioned above: lack of resources in the system, some terrible bug, etc... outside of these situations, it will continue to run if you coded it properly.
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 9:16:12
13楼: @hq200306


If you've watched my video above, you can see that the service keeps running even after I've "booted" the Android Emulator... this also happens if you close the Emulator, and then run it again... 

 my service will be called at every "boot" of the device, naturally, if nothing is wrong in my code or if the operating system doesn't kill the service for a special reason already mentioned above.

This goes for the Emulator or physical device!
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
作者:
男 emailx45 (emailx45) ▲▲▲▲△ -
普通会员
2023/8/27 9:35:35
14楼: One more important info to run your service in the background:

1) do not run the service's "thread" at a priority equal to or greater than your application!!!

That is, your secondary thread must be running at a low priority.

Thus, the system will be happy and work harder for more essential and necessary tasks.

Android appreciates this part! :)
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行3453.125毫秒 RSS