我在使用Android Studio 1.1调试多线程应用时遇到了麻烦.似乎当一个断点被击中时,所有其他线程也会停止,而不仅仅是具有断点的线程.我在Activity的onCreate中使用以下方法创建了一个简单的测试应用程序.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread a = new Thread("thread-a") {
@Override
public void run() {
Log.v("thread", "thread-a");
}
};
Thread b = new Thread("thread-b") {
@Override
public void run() {
Log.v("thread", "thread-b");
}
};
a.start();
b.start();
}
Run Code Online (Sandbox Code Playgroud)
我在thread-a和thread-b中的Log.v行设置断点,然后在我的Lollipop Nexus 5上以调试模式运行它.
当应用程序启动时,它会在线程-a中遇到断点,但我注意到的第一个问题是应用程序的UI是空白的,就像主线程暂停一样.接下来我去看看thread-b中的断点也被命中了所以我在Android Studio的调试器中拉出了Threads视图,但是当我去扩展thread-b箭头时,那里什么都没有.当我展开主线程时,它显示它在onStart()的某处暂停.

我做错了什么或者这个调试器无法一次调试多个线程?
我的应用程序使用片段活动,它只处于纵向模式,无法旋转屏幕.
最初我使用的是这种commit()方法,但现在我计划不加区别地将这些更改commitAllowingStateLoss()为片段活动
如果不重新评估我使用片段的每个个案,是否有任何理由不得不加区分?
在Android Studio中,如何在调试器连接并调试正在运行的应用程序时将其分离?
在Eclipse中,图标看起来像这样
.
我一直在断开USB线,但这似乎是一种粗暴的方法.
有没有办法让Android应用程序在Java代码中告诉它是否在平板电脑或手机上运行?
我正在尝试使用这里的教程实现Facebook LoginButton https://developers.facebook.com/docs/android/login-with-facebook/v2.0#step2
问题就在于此authButton.setFragment(this);.
我使用的是原生片段(android.app.Fragment)但是setFragment需要支持Fragment(android.support.v4.app.Fragment).
编辑:我无法切换到支持片段,我有一个使用本机片段的大应用程序.
给出以下代码:
public class FooBar {
public static volatile ConcurrentHashMap myConfigData = new ConcurrentHashMap();
}
public class UpdaterThread implements Runnable {
public void run() {
//Query the Data from the DB and Update the FooBar config Data
FooBar.myConfigData = ConfigDataDAO.getLatestConfigFromDB();
}
}
Run Code Online (Sandbox Code Playgroud)
Thread-Class将定期更新myConfigData Membervariable(每5分钟通过一个Executor).myConfigData的设置是在"外部"线程threadafe(原子)中,还是我必须将每个Read和Write操作同步到myConfigData变量?
编辑:问题不是ConcurrentHashMap是线程安全的(它是根据javadoc)而是在myConfigData Member变量中设置ConcurrentHashMap本身.这个变量可能被几个线程"一次"读取和写入,所以问题是设置是否是原子的.我认为这可以概括为"Java引用变量的设置是否为原子?".
(我也使它变得不稳定.这是一个不同的问题,与原子性无关 - 我的问题 - 而是"其他线程中的可见性"和之前发生的关系.)
我的目标是执行网络呼叫的方法,除非网络呼叫已在进行中,在这种情况下呼叫者订阅现有呼叫的结果.
这是我所拥有的,它主要起作用:
private AsyncSubject<Stuff> asyncSubject;
public Observable<Stuff> getStuff() {
if (asyncSubject == null) {
asyncSubject = AsyncSubject.create();
asyncSubject
.doAfterTerminate(new Action() {
@Override
public void run() throws Exception {
asyncSubject = null;
}
})
.subscribe();
retrofitApi.getStuff()
.subscribe(asyncSubject);
}
return asyncSubject
.someOperatorsHere();
}
Run Code Online (Sandbox Code Playgroud)
这主要起作用,因为asyncSubject在终止时将其自身空出,以便任何后续调用将重新执行网络请求.
但是有一个bug,有之间的窗口if (asyncSubject == null),并return asyncSubject在那里doAfterTerminate可以执行,我得到一个空指针.
任何想法如何修复错误.也许有更优雅的Rx方式来做到这一点?或synchronized阻止.或者是一种查询Retrofit以获取网络进度的方法.
有没有人想出如何使用 fragmentScenario Espresso 测试(应用程序的 Activity 位于基本模块中)单独测试动态功能模块中的片段。
我已经克服了几个问题,例如关于样式不是 Theme.Appcompat 和 Android Studio 没有运行的withId抱怨,但现在在运行时抱怨它R.id在片段的布局中找不到。
android android-fragments android-studio android-espresso dynamic-feature-module
如何将图像与行中文本的基线对齐。Modifier.alignByBaseline()适用于文本,但图像不参与对齐。
@Composable
fun Sample() {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center,
) {
Text(
text = "One",
modifier = Modifier.alignByBaseline(),
fontSize = 40.sp
)
Image(
modifier = Modifier
.padding(horizontal = 8.dp)
.size(24.dp)
.alignBy(FirstBaseline),
painter = painterResource(id = R.drawable.ic_launcher_background),
contentDescription = "",
)
Text(
text = "two",
modifier = Modifier.alignByBaseline(),
fontSize = 40.sp
)
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让选择器选择可以使用@style在布局中使用的样式元素?具体来说,我正在尝试根据state_pressed,state_focused和state_selected更改TextView元素,如颜色和阴影.我尝试了多种选择器,项目和样式的XML安排,并没有成功.
我试图想出一种方法将这两个函数合二为一,
fun parse(string: String): LibObject {
return SomeJavaLibrary.parse(string)
}
fun parseNullable(string: String?): LibObject? {
if (string != null) {
return parse(string)
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果输入可以为空,我希望输出可以为空,否则它是不可为空的.几乎像参数化的可空性.我猜这不可能,但想到我会问.如果没有,是否有更优雅的选择?