我有两个观点--A和B.他们有不同的高度.
如何垂直对齐这些视图的中心ConstraintLayout
?
例如,在下面的XML中,我希望中心img_change_picture
与中心对齐txt_change_picture
.
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.constraint.Guideline
android:id="@+id/guideline_icons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.1"/>
<android.support.constraint.Guideline
android:id="@+id/guideline_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2"/>
<ImageView
android:id="@+id/img_change_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/guideline_icons"
app:layout_constraintTop_toBottomOf="@id/img_header"
android:layout_marginTop="@dimen/settings_main_vertical_spacing"
app:srcCompat="@drawable/change_picture"/>
<TextView
android:id="@+id/txt_change_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/guideline_text"
android:text="@string/settings_main_change_picture"
/>
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud) 在Android应用中使用协程时遇到了一些意外行为。
假设我有以下功能,它不是“挂起”。它启动工作线程,并应阻塞调用线程,直到所有工作线程终止:
fun doSomething() : Result {
// producers init thread
Thread {
for (i in 0 until NUM_OF_MESSAGES) {
startNewProducer(i) // each producer is a thread
}
}.start()
// consumers init thread
Thread {
for (i in 0 until NUM_OF_MESSAGES) {
startNewConsumer() // each consumer is a thread
}
}.start()
synchronized(lock) {
while (numOfFinishedConsumers < NUM_OF_MESSAGES) {
try {
(lock as java.lang.Object).wait()
} catch (e: InterruptedException) {
return@synchronized
}
}
}
synchronized(lock) {
return Result(
System.currentTimeMillis() - startTimestamp,
numOfReceivedMessages …
Run Code Online (Sandbox Code Playgroud) 当我尝试构建我的项目时,出现此错误(Gradle 使用--stacktrace
命令行选项运行):
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJavaWithJavac'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
at …
Run Code Online (Sandbox Code Playgroud) android illegalargumentexception android-gradle-plugin dagger-2
我曾经认为,当活动A被另一个全屏活动B替换时,onStop()
将调用A的回调.
这也反映在文档中:
活动的可见生命周期发生在对onStart()的调用和对onStop()的调用之间.在此期间,用户可以在屏幕上看到活动并与之交互.例如,当一个新活动开始并且这个活动不再可见时,会调用onStop().
然而,现在,我正在观察不同的行为(在Lollipop和Marshmallow上测试).
我开始AuthenticationActivity
从HomeActivity
和,尽管事实AuthenticationActivity
是一个全屏幕活动,HomeActivity
不停止.
在清单中声明这些活动:
<activity
android:name=".screens.home.activities.HomeActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".screens.authentication.activities.AuthenticationActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:windowSoftInputMode="adjustResize"
android:theme="@style/AppTheme.Transparent"/>
Run Code Online (Sandbox Code Playgroud)
当活动切换时,这是我在logcat中观察到的:
11-28 10:16:31.443 15183-15183/somepackage I/LOG:: LifeCycle : activity (somepackage.screens.home.activities.HomeActivity@3561e8e1) paused
11-28 10:16:31.583 15183-15183/somepackage I/LOG:: LifeCycle : activity (somepackage.screens.authentication.activities.AuthenticationActivity@2bbdb20f) created
11-28 10:16:31.753 15183-15183/somepackage D/Activity: performCreate Call secproduct feature valuefalse
11-28 10:16:31.753 15183-15183/somepackage D/Activity: performCreate Call debug elastic valuetrue
11-28 10:16:31.753 15183-15183/somepackage D/AuthenticationActivity: onStart()
11-28 10:16:31.753 15183-15183/somepackage I/LOG:: LifeCycle : …
Run Code Online (Sandbox Code Playgroud) 当从 Dagger 的模块显式提供服务时,我可以使用以下语法:
@Provides
fun provideService(): MyService = MyService()
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用属性而不是函数,则不起作用:
@Provides
val myService get() = MyService()
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:This annotation is not applicable to target 'member property without backing field or delegate'
。
使用属性的方法感觉它应该起作用,但它没有。
我的问题是是否有办法使用属性从 Dagger 模块提供服务?
我们有两个git存储库,包含两个不同但非常相似的项目.
第一个项目是主项目(以下简称MAIN),第二个项目是MAIN(DERIV)的推导.
编辑:请注意,这些不是同一个回购中的不同分支,而是两个单独的回购.在每个回购中,我们只维护一个分支master
.
我们并行处理这两个项目,但基本假设是对MAIN的每次更改也应该应用于DERIV.我们通过发布从MAIN到DERIV的定期拉动来满足这一要求.
问题:
git log
在DERIV中执行时,对于每次提交,我是否可以在添加了哪个存储库的克隆中看到?
编辑:问题是,当两个repos维持一个分支时,这是否可行master
.如果没有,那么问题就变成是否在两个repos中使用不同的分支名称将解决此问题.
我可以找到从MAIN到DERIV的拉动日期吗?
编辑:问题git log
如下:当我在MAIN项目上工作时,我从MAIN repo克隆到本地机器,做一些工作(多次提交),从MAIN拉出并解决冲突(如果有的话),推送到MAIN/master .最后一次提交的消息是Merge branch 'master' of MAIN
.当我从MAIN拉到DERIV并解决冲突时,消息是Merge branch 'master' of MAIN
- 与上面相同.我想在一个克隆中知道哪个repo是上面提到的(合并解析)提交.
谢谢
当我执行此单元测试时,我在输出中看到异常通知(可能是默认异常处理程序打印它):
@Test
fun uncaughtException() {
runBlocking {
val scope = CoroutineScope(Dispatchers.Default)
val job = scope.launch() {
delay(100)
println("inside coroutine")
}
scope.launch {
delay(50)
throw Exception()
}
job.join()
}
Thread.sleep(100)
println("test completed")
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试将自定义 CoroutineExceptionHandler 添加到范围的上下文中:
@Test
fun exceptionHandler() {
runBlocking {
val exceptionHandler = CoroutineExceptionHandler { _, throwable -> {
println("Caught exception")
}}
val scope = CoroutineScope(Dispatchers.Default + exceptionHandler)
val job = scope.launch() {
delay(100)
println("inside coroutine")
}
scope.launch {
delay(50)
throw Exception()
}
job.join()
}
Thread.sleep(100)
println("test completed")
} …
Run Code Online (Sandbox Code Playgroud)