Android Wear(Wear OS)开发 ——简化Wear

2019-04-11  本文已影响0人  bbz

1. 微光模式

智能手表的电池容量都比较低,导致续航也比较短。为了延长手表的续航,Wear OS 手表在没有操作一段时间后,会进入微光模式 AmbientMode。微光模式就是一个省电模式,这个模式会在低功耗下运行,默认情况下,手表会离开当前的应用,返回到表盘的界面。但有时候,我们希望开发的应用在某些情况下,可以一直保持可见的状态,这就需要我们使用支持微光模式的 Activity 了。

 public class HomeActivity extends FragmentActivity implements AmbientModeSupport.AmbientCallbackProvider
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        Log.d(TAG, "onCreate");
        AmbientModeSupport.attach(this);
    }

AmbientModeSupport.AmbientCallbackProvider定义如下,我们可以实现这些接口,来对微光模式的不同状态进行处理。

public abstract static class AmbientCallback {
    public AmbientCallback() {
    }

    public void onEnterAmbient(Bundle ambientDetails) {
    }

    public void onUpdateAmbient() {
    }

    public void onExitAmbient() {
    }

    public void onAmbientOffloadInvalidated() {
    }
}

2. Wear OS右划退出

<android.support.wear.widget.SwipeDismissFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.tencent.ui.voip.SwipeViewContainer
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--我们自己的视图-->
        ...
    </com.tencent.ui.voip.SwipeViewContainer>
</android.support.wear.widget.SwipeDismissFrameLayout>
public class SwipeViewContainer extends RelativeLayout {
    ....

    @Override
    public boolean canScrollHorizontally (int direction) {
        return true;
    }
}

3.Fragment

进入

FragmentTransaction transaction =  getActivity().getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_right_in, R.anim.slide_right_out);
transaction.add(R.id.fragment_container, messageListFragment);
transaction.addToBackStack(null);
transaction.commit();

回退

getActivity().getSupportFragmentManager().popBackStack();

同一个fragment不能重复add,不然会出错,这里需要处理一下

if (messageFragment.isAdded()){
    transaction.remove(messageFragment);
}
  FragmentManager mgrFragment = getSupportFragmentManager();
  mgrFragment.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
      @Override
      public void onBackStackChanged() {
          FragmentManager manager = getSupportFragmentManager();
          if (fragmentStackSize > manager.getBackStackEntryCount()) {//判断是回退操作
              if (manager != null) {
                  Fragment currFrag = manager.findFragmentById(R.id.fragment_container);
                  currFrag.onResume();
              }
          }
          fragmentStackSize = manager.getBackStackEntryCount();
      }
  });

4.性能问题

应用里有用RecycleView来显示列表,列表里有图片,我们使用Glide来显示的,这里需要注意的一点是,在使用Glide的时候,应该在别处对其进行一下初始化,不要在onBindViewHolder里就直接使用,这会导致第一次打开页面很慢。同样道理,onBindViewHolder里用到东西,最好都事先加载好。图片可以根据实际需求进行剪裁,避免使用原图。

RequestOptions options = new RequestOptions();
        options.centerCrop();
        options.override(width, height);
        Glide.with(mContext).load(conversation.getHeadimagepath()).into(holder.avatar);

5.总结

以上就是这次这个小项目开发过程中的一些点,并没有高大上的东西,自己做个记录,如果能帮助到你那就更好了

上一篇 下一篇

猜你喜欢

热点阅读