我在Gitlab CI上构建android并且每次下载依赖项都很烦人.我试过缓存:
$HOME/.gradle/
$HOME/.gradle/caches/
$GRADLE_HOME/caches/
$HOME/.m2/
.gradle/
build/
app/build/
Run Code Online (Sandbox Code Playgroud)
我的.gitlab-ci.yml的第26594次迭代就在这里.我已经在我的构建环境中安装了gradle,因为没有缓存gradlew每次下载它,这需要更多的时间.我用于建筑的图像就在这里.我的CI服务器启动脚本可以在这里找到.我假设,如果缓存有效,我将看不到每个构建下载的依赖项列表.
构建日志:
gitlab-ci-multi-runner 0.7.2(998cf5d)使用Docker执行器和图像android ...拉码头图像gitlab/gitlab-runner:build ...拉码头图像android:最新...警告:不能拉最新版本的图像android:最新:错误:图像库/ android:最新未找到警告:将使用本地找到的图像.
Running on runner-76acd9d3-project-74192-concurrent-0 via ff9200d4be41...
Fetching changes...
Removing .gradle/
Removing artifacts.upload.log
Removing rxfirebaseandroid/build/
HEAD is now at 7f151df djgfj
Checking out 7f151df2 as ci-gitlab...
HEAD is now at 7f151df... djgfj
Restoring cache...
$ gradle testDebug
Download https://jcenter.bintray.com/com/android/tools/build/gradle/1.3.0/gradle-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/build/gradle-core/1.3.0/gradle-core-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/build/builder/1.3.0/builder-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/lint/lint/24.3.0/lint-24.3.0.pom
Download https://jcenter.bintray.com/net/sf/proguard/proguard-gradle/5.2.1/proguard-gradle-5.2.1.pom
Download https://jcenter.bintray.com/net/sf/proguard/proguard-parent/5.2.1/proguard-parent-5.2.1.pom
Download https://jcenter.bintray.com/com/android/tools/build/builder-model/1.3.0/builder-model-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/build/builder-test-api/1.3.0/builder-test-api-1.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/sdklib/24.3.0/sdklib-24.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/sdk-common/24.3.0/sdk-common-24.3.0.pom
Download https://jcenter.bintray.com/com/android/tools/common/24.3.0/common-24.3.0.pom
Download …Run Code Online (Sandbox Code Playgroud) 我制作了一些带有textview的复选框和单选按钮,但它们在Lollipop之前没有着色.
我的textviews扩展AppCompatCheckedTextView,样式为:
<style name="CheckBoxStyle" parent="android:Widget.TextView">
<item name="android:textAppearance">?android:attr/textAppearance</item>
<item name="android:drawableRight">?android:attr/listChoiceIndicatorMultiple</item>
<item name="android:drawableEnd">?android:attr/listChoiceIndicatorMultiple</item>
<item name="android:clickable">true</item>
<item name="android:background">?attr/selectableItemBackground</item>
<item name="android:gravity">center_vertical</item>
<item name="android:paddingTop">8dp</item>
<item name="android:paddingBottom">8dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我的主题中定义了我的口音:
<style name="AppTheme.Platform.NoActionBar" parent="Theme.AppCompat.NoActionBar">
<item name="android:selectableItemBackground">@drawable/press_overlay_dark</item>
<item name="android:borderlessButtonStyle">@style/BorderlessButton</item>
<item name="android:colorAccent">@color/color_accent</item>
<item name="colorAccent">@color/color_accent</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我正在构建v21,至少使用v16并使用AppCompat v7-22.1.1.我的活动扩展了AppCompatActivity

我有一个不显示任何项目的RecyclerView.最初它是空的,但后来我添加了项目并调用notifyDatasetChanged().getItemCount()被调用并返回25,onBindViewHolder被调用3次并正确设置视图.
public AlbumListAdapter(FacebookActivity activity, long pageId, OnItemClickListener listener){
this.listener = listener;
this.inflater = LayoutInflater.from(activity);
this.service = new PagedGraphService<Album>(String.format("https://graph.facebook.com/%d/albums", pageId),
new PagedGraphService.ServiceUpdateListener() {
@Override
public void dataUpdated() {
notifyDataSetChanged();
}
@Override
public void endReached() {
}
},
new TypeToken<PagedGraphService.GraphResponse<Album>>(){}.getType());
}
@Override
public AlbumHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
return new AlbumHolder(inflater.inflate(R.layout.photo_album_list_card, viewGroup, false));
}
@Override
public void onBindViewHolder(AlbumHolder viewHolder, int i) {
viewHolder.setAlbum(service.get(i));
}
@Override
public int getItemCount() {
return service.getLoadedCount();
}
Run Code Online (Sandbox Code Playgroud)
它的要点.该服务包含一个专辑列表,并通过调用dataUpdated()和endReached()通知适配器更改.
更多代码:
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup …Run Code Online (Sandbox Code Playgroud) 是否存在向后兼容的方式来确定视图是否布局?View有isLaidOut,但它是API 19.我目前使用if(view.getWidth() + view.getHeight() > 0),但它看起来不像一个稳定和干净的方式来做到这一点.我知道OnGlobalLayoutListener,但我想知道现在是否有一个观点.
我正在使用SeekBar来显示音频文件的进度以及寻找某个时间.为了更新,我使用Runnable,每隔一秒左右在MediaPlayer上调用getCurrentPosition().每次发生这种情况都会导致音频中出现少量延迟.因为我经常打电话,所以在玩东西时我会发现非常明显的口吃.如果它是相关的,我正在使用setAudioStreamType(AudioManager.STREAM_MUSIC),文件格式是mp4,而AAC音频(没有视频),我正在使用Android 2.3.4.有没有办法通过getCurrentPosition()获得良好的音频,还是我必须实现自己的进度计算?
Runnable:
private Runnable mUpdateTask = new Runnable(){
@Override
public void run() {
mSeekBar.setProgress((int) (mPlayer.getCurrentPosition() * 100 / mArrayAdapter.getRecording(mPlayingId).mDuration));
mHandler.postDelayed(mUpdateTask, 999);
}
};
Run Code Online (Sandbox Code Playgroud) 我有一个布局,其中RecyclerView位于具有几个按钮的另一个布局之上.第一个回收商项目是一个带有较大上边距的标题,以在其上方创建一个空白区域.现在我希望点击通过该开放空间工作,刷卡也应该滚动回收器.视图位于一个简单的框架中.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<package.FeedBackgroundView
android:id="@+id/feed_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:scrollbars="vertical"/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
回收者仅使用顶部填充或边距消耗所有点击.我需要点击才能通过,但是滑动应该留在回收器中进行滚动.
编辑:
我的点击工作,解决方案是:
recycler.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
background.dispatchTouchEvent(event);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
现在我有一个问题,因为我翻译了背景(视差),点击没有到达正确的位置.我是否也要翻译这些活动?
我正在做一些属性动画,想知道哪个更快-更新边距或填充。两者都通过扩展进行更新Property<T, V>。
public static final Property<View, Integer> LINEAR_TOP_MARGIN_PROPERTY = new Property<View, Integer>(Integer.class, "") {
@Override
public Integer get(View view) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
return params.topMargin;
}
@Override
public void set(View view, Integer value) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
params.topMargin = value;
view.requestLayout();
}
};
public static final Property<View, Integer> PADDING_BOTTOM_PROPERTY = new Property<View, Integer>(Integer.class, "") {
@Override
public Integer get(View view) {
return view.getPaddingBottom();
}
@Override
public void set(View object, Integer value) {
object.setPadding(
object.getPaddingLeft(), …Run Code Online (Sandbox Code Playgroud) 在处理泄漏时,我得到了一个java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist.内部Application.onCreate.根据我的理解,这是因为LeakCanary创建了我的应用程序类而没有所有Google Play服务,Firebase无法成功初始化.任何想法如何解决这一问题?
编辑:我正在使用leakcanary-android:1.4-beta2,这是在转储堆后发生的.
我知道之间的差异concatMap,flatMap以及switchMap,但如果我只流发出一个单一的项目和完成?在这种情况下,功能上(双关语)这两个运算符是相同的,但性能如何呢?如果输入仅发出单个项目,哪个运营商需要更多资源?大多数情况下,如果相关,输出也是单个项目.
android ×8
audio ×1
firebase ×1
gitlab-ci ×1
gradle ×1
leakcanary ×1
media-player ×1
rx-java ×1