屏幕关闭时,Android应用程序无法正常工作

时间:2016-08-24 08:59:09

标签: java 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);
        }
    };
}

3 个答案:

答案 0 :(得分:0)

处理程序不能用作后台服务。

您需要使用JobScheduler for API> 21,GcmNetworkManager或AlarmManager for lower versions,我建议你使用这个库:https://github.com/evernote/android-job

答案 1 :(得分:0)

使用处理程序无法实现此目的。如果使用handler.postDelayed(),处理程序将在cpu休眠时停止(屏幕熄灭)。要实现此目的,您需要设置后台服务。查看this教程。你有一切解释

答案 2 :(得分:0)

当应用程序处于forground时,

Activity的Handler部分工作,因此对任何后台方法都使用Service。活动不是在后台沟通的媒介

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

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