以下代码来自我的MANIFEST.XML文件
以下作品:
<receiver android:name="com.PageP.Alarm>
但是,当我添加过程时,它不会触发:
<receiver android:process=":remote" android:name="com.PageP.Alarm>
我有一个断点:
public void onReceive(Context context, Intent intent)
如果没有远程进程,它可以工作,如果我添加远程进程,它就会停止工作。
我缺少什么?
好的,让我发布我的ASYNC HTTPGET
package com.PageP;
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
public class GrabURL extends AsyncTask<String, Void, Void> {
private HttpClient Client = new DefaultHttpClient();
private String content;
private String Error = null;
private String url = null;
protected void onPreExecute() {
// Dialog.setMessage("Downloading source..");
// Dialog.show();
}
protected Void doInBackground(String... urls) {
url = urls[0];
try {
HttpGet httpget = new HttpGet(urls[0]);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
content = Client.execute(httpget, responseHandler);
} catch (ClientProtocolException e) {
Error = e.getMessage();
cancel(true);
} catch (IOException e) {
Error = e.getMessage();
cancel(true);
}
return null;
}
protected void onPostExecute(Void unused) {
Login.GotURL(content, url);
Client = null;
}
}
然后我打电话给
public static void Ping(String Args) {
final GrabURL wget = new GrabURL();
String url = "";
url = MyAuth("PING")+ Args;
wget.execute(PPURL+url);
}
当我的警报触发时,我希望它能够在另一端收到返回HTML的数据。我正在遇到问题,当安卓进入睡眠模式时,它不可靠地接收HTML返回数据。
答案 0 :(得分:1)
我缺少什么?
由于单独处理通常是一个坏主意,只需关闭android:process
。
我需要它保持AWAKE足够长时间调用异步wget并处理返回的html。
我不知道你认为什么是“异步wget”。我将假设您确实意味着您正在使用您的应用程序打包ARM编译的wget
二进制文件,这非常奇怪。
此外,Android将在几秒钟内终止您的进程,以便占用该进程的主应用程序线程。所以你将浪费RAM,CPU和电池没有特别的优势。
使用HttpUrlConnection
或HttpClient
来处理来自WakefulIntentService
的您的HTTP请求(“async wget”),或处理IntentService
的{{1}}围绕使用WakeLock
警报的问题。 _WAKEUP
为您提供了一个后台线程(执行长时间运行所必需的),并且在不再需要时会自动关闭(必要时用户不会因为任务杀手攻击你而伤害他们的设备)。
我可以进入一个do / loop并在其中睡觉,每250毫秒醒来一次,看看数据是否已经进入
如果您使用IntentService
或HttpUrlConnection
来执行您的HTTP请求,您将通过这些API了解“数据是否已进入”。
设定时间
如果您使用HttpClient
或HttpUrlConnection
来执行HTTP请求,则可以指定请求超时期限。