IntentService
定义:
IntentService是继承自Service实现了异步功能的类。
如何实现后台异步下载功能
方式一:
Service+Thread
方式二:
IntentService
继承关系图

IntentService-应用
IntentService创建步骤
新建一个MyService继承自IntentService
public class MyIntentService extends IntentService {
HttpURLConnection connection;
InputStream inputStream;
public MyIntentService(){
super("anyway");
}
public MyIntentService(String name) {
super(name);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
try {
URL url = new URL("http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html");
connection = (HttpURLConnection) url.openConnection();
inputStream = connection.getInputStream();
byte[] bytes = new byte[1024];
int len = 0;
StringBuffer stringBuffer = new StringBuffer();
while ((len = inputStream.read(bytes)) != -1){
stringBuffer.append(new String(bytes,0,len)); }
Intent intent1 = new Intent("com.intentreceiver");
intent1.putExtra("json",stringBuffer.toString());
sendBroadcast(intent1);
} catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
重写onHandleIntent()方法
public class IntentServiceActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_service);
}
public void download(View view) {
//开启服务
Intent intent = new Intent(this,MyIntentService.class);
startService(intent);
}
}
注册服务,启动服务
<service android:name=".MyIntentService"/>
Service-前台服务
后台服务在系统内存不足时有被回收的可能,为了保活服务我们可以选择将服务写为前台服务
前台Service应用思路分析
1、创建service,重写onStartCommand方法
public class MyServices extends Service {
private static final String TAG = "amy";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"onCreate");
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent intent1 = new Intent(this,MainActivity.class);
PendingIntent intent2 = PendingIntent.getActivity(this,0,intent1,0);
Notification notification = new Notification.Builder(this)
.setSmallIcon(R.mipmap.bq1)
.setContentTitle("前台服务")
.setContentText("播放器用的是前台服务")
.setContentIntent(intent2)
.build();
startForeground(110,notification);
return super.onStartCommand(intent, flags, startId); }
2、注册并启动service
public class ServicesActivity extends AppCompatActivity {
Intent intent;
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_services);
//参数一:上下文 参数二:自定义服务类.class
intent = new Intent(this,MyServices.class); }
public void startFroatServer(View view) {
startService(intent);
}
public void stopFroatServer(View view) {
stopService(intent); }
}
Notification+IntentService
Service-核心代码
/**
* 线程用来发送通知
*/
Thread nThread = new Thread(){
@Override
public void run() {
super.run();
builder.setProgress(total,currentProgress,false);
manager.notify(notificaton_id,builder.build());
handler.postDelayed(nThread,1000);
}
};
@Override
public void onDestroy() {
super.onDestroy();
handler.removeCallbacks(nThread);
}
}
Activity-核心代码
public void downloadMusic(View view) {
//下载
Intent intent = new Intent(this,DownLoadMusicService.class);
intent.putExtra("url","http://m10.music.126.net/20200704095418/39a88357cd32cb186ccaed3699cd2083/ymusic/8481/cbba/7868/c96fe64c4a34c2137ce30e5f941b145c.mp3");
startService(intent);
}