Service
从Android 8.0系统开始,应用的后台功能被大幅削减。现在只有当应用保持在前台可见状态的情况下,Service才能保证稳定运行,一旦应用进入后台之后,Service随时都有可能被系统回收。
在使用Android studio创建service时,会自动在清单文件中进行注册,默认会继承service类。然后重写它的onCreate,onStartCommand,onDestroy和onBind方法
Notification
通知在Android8.0以上需要引入渠道
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent hangIntent = new Intent(this, MainActivity.class);
PendingIntent hangPendingIntent = PendingIntent.getActivity(this, 1001, hangIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("这是一个通知")
.setContentText("这是一个通知")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(hangPendingIntent)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.head))
.setAutoCancel(true)
.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID,
CHANNEL_NAME, NotificationManager.IMPORTANCE_LOW);
manager.createNotificationChannel(notificationChannel);
}
tablayout的监听器
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Log.e("TAG","tab position:"+tab.getPosition());
replaceFragment(fragments.get(tab.getPosition()));
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
加载完成后首选项没有触发onTabSelected,在设置监听器后手动调用tabLayout.getTabAt(0).select();后也没有触发。查阅网上的解决方法后,总结为两点。
1、需要先设置监听器再进行addTab操作。2、在第一次加载时,会回调一次onTabReselected,可以在里面写上Ontabselected里的代码,问题解决。
四大组件的ANR
Activity出现ANR是超过5秒
Broadcast出现ANR是超过10秒
Service出现ANR是超过20秒
ContentProvider出现ANR是超过10秒