我是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);
}
};
}
答案 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)
Activity的Handler部分工作,因此对任何后台方法都使用Service。活动不是在后台沟通的媒介
即使启动它的组件被破坏,服务也可以无限期地在后台运行。
这是服务的官方链接 https://developer.android.com/guide/components/services.html