Android应用程序不工作时,屏幕关闭

Android应用程序不工作时,屏幕关闭

问题描述:

我是新来的android, 我想在后台运行我的应用程序,但它没有。Android应用程序不工作时,屏幕关闭

一切工作正常,但当手机屏幕熄灭时,mHandlerTask停止工作。当我打开应用程序的屏幕继续工作。

下面是代码:

package com.ekaspace.security.ekaspace; 

import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

public class SecuritySystem extends AppCompatActivity { 

    private MediaPlayer mediaPlayer; 
    TextView mTextView = (TextView) findViewById(R.id.textView3); 

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

     mediaPlayer = MediaPlayer.create(this, Uri.parse("URL")); 
     mediaPlayer.setLooping(true); 
     mediaPlayer.start(); 

     mHandlerTask.run(); 

    } 

    public void stopApp(View v) { 
     moveTaskToBack(true); 
     android.os.Process.killProcess(android.os.Process.myPid()); 
     System.exit(1); 
    } 

    private final static int INTERVAL = 1000 * 30; 
    Handler mHandler = new Handler(); 

    Runnable mHandlerTask = new Runnable() 
    { 
     @Override 
     public void run() { 

      try { 

       String reqURL = "URL"; 

       URLConnection connection = (new URL(reqURL)).openConnection(); 
       connection.setConnectTimeout(5000); 
       connection.setReadTimeout(5000); 
       connection.connect(); 

       InputStream in = connection.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
       StringBuilder html = new StringBuilder(); 
       for (String line; (line = reader.readLine()) != null;) { 
        html.append(line); 
       } 
       in.close(); 

       String response = html.toString(); 

       mTextView.setText(response); 
      } catch(Exception e) { 
       mTextView.setText(e.toString()); 
      } 

      mHandler.postDelayed(mHandlerTask, INTERVAL); 
     } 
    }; 
} 

处理程序将不作为后台服务工作。

您需要使用的jobscheduler的API> 21,GcmNetworkManager或AlarmManager较低的版本,我建议你使用这个库:https://github.com/evernote/android-job

你不能用处理器实现这一目标。如果使用handler.postDelayed(),处理程序将在CPU睡眠(屏幕熄灭)时停止。为了达到这个目标,你需要设置后台服务。检查this教程。你有一切解释那里

活动的处理程序部分工作时,应用程序在forground所以使用服务的任何背景方法。活动不是在后台进行沟通的媒介

服务可以无限期地在后台运行,即使启动它的组件被销毁。

这里是服务的官方链接 https://developer.android.com/guide/components/services.html