欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android开发记录一些技巧

程序员文章站 2022-07-03 20:06:13
...

一些技巧

  1. 获取全局context
public class MineApplication extends Application {
    private static Context context;

    public static Context getContext() {
        return context;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

}
  1. 使用Intent传递对象

    Serializable 比Parcelable 效率低??

  2. 定制自己的日志工具

  3. 创建定时任务

    定时启动某服务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);
           }
  4. Doze模式

    用户长时间不使用手机,会进入Doze模式,很多行为被限制

    setAndAllowWhileIdle setExactAndAllowWhileIdle在doze模式也可以执行?

  5. 多窗口模式

    1).避免进入多窗口模式,重新创建

    android:configChanges=”orientation|keyboardHidden|screenSize|screenLayout”

    2).android:resizeableActivity=”false”

    此节点是否支持多窗口 activity或application

    3).targetSdkVersion 低于24并且不支持横竖屏切换,就不支持多窗口模式

  6. lambda表达式

    使支持labda表达式

    android.compileOptions.sourceCompatibility 1.8
    android.compileOptions.targetCompatibility 1.8

    类似es6

    swipeRefresh.setOnRefreshListener(() -> 
       requestWeather(weatherId)
    );
    navButton.setOnClickListener((v)-> 
           drawerLayout.openDrawer(GravityCompat.START)
    );
  7. SerializedName

    public class Now{
    //通过注释的方式建立映射关系
       @SerializedName("tmp")
       public String temperature;
    
       @SerializedName("cond")
       public More more;
    
       public class More {
    
           @SerializedName("txt")
           public String info;
    
       }
    
    }
  8. 背景图和状态栏融合

    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进行处理