如何在后台运行java

rkttyhzu  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(393)

如何在后台运行这个,我的意思是即使我移动到其他应用程序或进入我的android主屏幕或关闭屏幕,按钮仍然会点击自己请帮助我

  1. new Handler().postDelayed(new Runnable() {
  2. @Override
  3. public void run() {
  4. button1.performClick();
  5. }
  6. }, 5000);
sirbozc5

sirbozc51#

要知道的事情
我将尽量用外行的术语来阐述,以便您更好地掌握线程和异步任务的概念

  1. new Handler().postDelayed(new Runnable() {
  2. @Override
  3. public void run() {
  4. //business logic
  5. }
  6. }, 5000);

是一个 Blocking 方法,该方法在ui线程上运行(我假设您是编程/android新手)[请阅读关于线程的内容以理解我在deapth中所说的内容],
简而言之,这意味着您的应用程序正在线程上执行某些逻辑(“一个工人”,负责在屏幕上呈现ui),
通过使用线程,您可以通过将多个任务划分为多个工作线程来提高应用程序的效率,但您不能在后台运行应用程序。
如何让你的申请在后台工作?
谷歌在android oreo中引入了一些背景限制。所以为了让你的应用程序保持活力,你需要 foreground service by showing an ongoing notification. 1.实现服务的方式如下

  1. public class YourService extends Service {
  2. private static final int NOTIF_ID = 1;
  3. private static final String NOTIF_CHANNEL_ID = "Channel_Id";
  4. @Nullable
  5. @Override
  6. public IBinder onBind(Intent intent) {
  7. return null;
  8. }
  9. @Override
  10. public int onStartCommand(Intent intent, int flags, int startId){
  11. // do your jobs here
  12. startForeground();
  13. return super.onStartCommand(intent, flags, startId);
  14. }
  15. private void startForeground() {
  16. Intent notificationIntent = new Intent(this, MainActivity.class);
  17. PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
  18. notificationIntent, 0);
  19. startForeground(NOTIF_ID, new NotificationCompat.Builder(this,
  20. NOTIF_CHANNEL_ID) // don't forget create a notification channel first
  21. .setOngoing(true)
  22. .setSmallIcon(R.drawable.ic_notification)
  23. .setContentTitle(getString(R.string.app_name))
  24. .setContentText("Service is running background")
  25. .setContentIntent(pendingIntent)
  26. .build());
  27. }
  28. }

2.你还需要启动服务

  1. public class App extends Application {
  2. @Override
  3. public void onCreate() {
  4. super.onCreate();
  5. startService(new Intent(this, YourService.class));
  6. }
  7. }

3.在androidmanifest.xml的“application”标记中添加服务

  1. <service android:name=".YourService"/>

4.以及“manifest”标记中的此权限请求(如果api级别为28或更高)

  1. <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

这样,您就可以将您的服务保留在后台。我建议您阅读文章并查看github存储库,还要多练习以精通android:)

展开查看全部

相关问题