本文共 3606 字,大约阅读时间需要 12 分钟。
IntentService,可以看做是Service和HandlerThread的结合体,在完成了使命之后会自动停止,适合需要在工作线程处理UI无关任务的场景。
思路:创建服务,注册服务 ,
(1)创建服务:MyIntentService.java
public class MyIntentService extends IntentService { //TODO 注意:必须提供无参数构造,不然清单文件中注册报错 public MyIntentService(){ super("MyIntentService"); } public MyIntentService(String name) { super(name); } //TODO 将所有耗时操作都在该方法中完成,相当于开启线程 @Override protected void onHandleIntent(@Nullable Intent intent) { StringBuffer sb=new StringBuffer(); HttpURLConnection connection=null; InputStream inputStream=null; try { URL url=new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1"); connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(5*1000); connection.setConnectTimeout(5*1000); if(connection.getResponseCode()==200){ inputStream = connection.getInputStream(); byte[] b=new byte[1024]; int len=0; while((len=inputStream.read(b))!=-1){ sb.append(new String(b,0,len)); } //TODO 向Activity或Fragment发送json串 Intent intent1=new Intent(); intent1.setAction("com.bawei.intentservice"); Bundle bundle = new Bundle(); bundle.putString("json",sb.toString()); intent1.putExtras(bundle); sendBroadcast(intent1); } } catch (IOException e) { e.printStackTrace(); }finally{ if(inputStream!=null){ try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if(connection!=null){ connection.disconnect(); } } }}
(2)清单文件注册服务
(3)Activity代码
public class MainActivity extends AppCompatActivity { private MyReceiver myReceiver; private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册广播 IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("com.bawei.intentservice"); myReceiver=new MyReceiver(); registerReceiver(myReceiver,intentFilter); //开启服务 intent=new Intent(this,MyIntentService.class); startService(intent); } //解除广播+关闭服务 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceiver); stopService(intent); } class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String action=intent.getAction(); if("com.bawei.intentservice".equals(action)){ Bundle bundle = intent.getExtras(); String json = bundle.getString("json", ""); //接续json串 展现在ListView 中 Toast.makeText(context, ""+json, Toast.LENGTH_SHORT).show(); } } }}
转载地址:http://cwktn.baihongyu.com/