android开发记录一些技巧
程序员文章站
2022-07-03 20:06:13
...
一些技巧
- 获取全局context
public class MineApplication extends Application {
private static Context context;
public static Context getContext() {
return context;
}
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
-
使用Intent传递对象
Serializable 比Parcelable 效率低??
定制自己的日志工具
-
创建定时任务
定时启动某服务setExact比set精确
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); int anHour = 8 * 60 * 60 * 1000; // 这是8小时的毫秒数 long triggerAtTime = SystemClock.elapsedRealtime() + anHour; Intent i = new Intent(this, AutoUpdateService.class); PendingIntent pi = PendingIntent.getService(this, 0, i, 0); manager.cancel(pi); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { manager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi); }else { manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi); }
-
Doze模式
用户长时间不使用手机,会进入Doze模式,很多行为被限制
setAndAllowWhileIdle setExactAndAllowWhileIdle在doze模式也可以执行?
-
多窗口模式
1).避免进入多窗口模式,重新创建
android:configChanges=”orientation|keyboardHidden|screenSize|screenLayout”
2).android:resizeableActivity=”false”
此节点是否支持多窗口 activity或application
3).targetSdkVersion 低于24并且不支持横竖屏切换,就不支持多窗口模式
-
lambda表达式
使支持labda表达式
android.compileOptions.sourceCompatibility 1.8 android.compileOptions.targetCompatibility 1.8
类似es6
swipeRefresh.setOnRefreshListener(() -> requestWeather(weatherId) ); navButton.setOnClickListener((v)-> drawerLayout.openDrawer(GravityCompat.START) );
-
SerializedName
public class Now{ //通过注释的方式建立映射关系 @SerializedName("tmp") public String temperature; @SerializedName("cond") public More more; public class More { @SerializedName("txt") public String info; } }
-
背景图和状态栏融合
if (Build.VERSION.SDK_INT >= 21) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().setStatusBarColor(Color.TRANSPARENT); } //对decorView进行处理