0
我目前有一个管理广播接收器的服务。该接收机可以关闭和打开。Android:在OnReceive方法中启动异步任务
当收到SMS时触发OnReceive。然后它将SMS上传到服务器。代码工作正常,但我听说从3.0以上的网络连接需要在Async任务上运行。即使不是这种情况,我想将上传移动到另一个线程,因此上传任务不能阻止UI线程。 (我已经累到服务移动到IntentService,这将导致广播接收器泄漏)
SMSBR = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//START OF ONRECIVER************************
Bundle extras = intent.getExtras();
String strMessage = "";
if (extras != null)
{
Object[] smsextras = (Object[]) extras.get("pdus");
for (int i = 0; i < smsextras.length; i++)
{
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
String strMsgBody = smsmsg.getMessageBody().toString();
String strMsgSrc = smsmsg.getOriginatingAddress();
strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;
Log.d("Message", "is "+strMessage);
//***************************************************************
InputStream is = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mayar.abertay.ac.uk/~1001077/insert.php");
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("DeviceNumber", telephonyManager.getLine1Number().toString()));
nameValuePairs.add(new BasicNameValuePair("SenderNumber", strMsgSrc));
nameValuePairs.add(new BasicNameValuePair("Message", strMsgBody));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.d("is = ", is.toString());
Log.d("In SMS", "Sender success");
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
Log.d("Message upload Running", "on UI");
} else {
Log.d("Message upload NOT running", "on UIx");
}
}catch (Exception e){
Log.e("Log_tag", "Error in http sms " + e.toString());
Log.d("In SMS", "Sender NOT success");
}
//****************************************************************
}
}
//END OF ON RECEIVE****************************
}
};
问题是什么?如何把它放在AsyncTask中?或者如果你应该使用一个AsyncTask?如果一个AsyncTask可以从调用onReceive()开始? – baske 2013-05-01 15:19:44
@baske如何获取在AsyncTask中运行的上传? – Dan1676 2013-05-01 15:34:33