我需要使用(greenrobot)EventBus与远程服务进行通信.不幸的是,它似乎不适用于IPC.看看代码,我也没有看到解决方法.任何帮助,将不胜感激 !
奖金问题 - 是否还有支持IPC的其他EventBuses(适用于Android)?
我需要通过蓝牙(到Arduino)从我的Android应用程序传输一些数据.我不是从Arduino读回/接收任何东西.对于我的单线程需求,我使用了IntentService.配对后,我的代码第一次连接和发送数据时工作正常.发送数据后没有错误我断开连接.但是当我第二次尝试连接时,我在尝试myBluetoothSocket.connect()时出现以下错误:
读取失败,套接字可能关闭或超时,读取ret:-1
唯一的解决方案是关闭Arduino设备并重新连接(如果我强制停止应用程序并尝试重新连接,则无效).
请注意,如果我生成2个线程(每个线程用于读取和写入),无论我连接多少次并发送数据(从而证明Arduino端没有任何错误,"阻止"旧连接),一切正常.
这是我的Android代码:
import android.app.IntentService;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.content.Context;
import android.os.Build;
import android.os.ParcelUuid;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.UUID;
public class DataTransmissionService extends IntentService {
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final String TAG = "DataTransmissionService";
private BluetoothAdapter btAdapter = null;
private BluetoothSocket btSocket = null;
private OutputStream outStream = null;
private BluetoothDevice device = null;
public DataTransmissionService() {
super("DataTransmissionService");
}
@Override
protected …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的Google Analytics代码拆分为来自我的主应用程序(包com.xyz)的单独模块(包com.abc).我正面临着这些问题:
我尝试过(并且失败了):
我使用的是RecyclerView
用GridLayoutManager
.用户可以在2到4之间切换跨度计数,这将导致动画将每个单元格的内置翻译动画运行到其新位置.我到目前为止使用的代码是:
TransitionManager.beginDelayedTransition(moviesGridRecycler);
gridLayoutManager.setSpanCount(NEW_SPAN_COUNT);
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
这对我来说一直很好,但现在我需要为每个跨度计数设置不同的布局.为了支持这一点,我有两种视图类型RecyclerView
,因为当移动到新的跨度计数时视图类型被更改,RecyclerView
无法看到它是"相同"的内容,并且不运行默认的转换动画.
如果我启用布局转换,我会获得视图输入动画,而不是查看位置更改动画.两个跨度计数的单元格视图的宽度和高度均为match_parent
和wrap_content
.
作为替代方案,我尝试将所有新视图类型放在一起,只有一种视图类型.我有一个FrameLayout
,它包含两个跨度计数的视图.在onBindViewHolder()
,我只是切换子视图的可见性.这也导致没有动画.
完整代码:
class ItemFragment : Fragment() {
private var spanCount = 2
lateinit var recyclerView: RecyclerView
lateinit var button: Button
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_item_list, container, false)
recyclerView = view.findViewById(R.id.listView)
recyclerView.apply {
adapter = MyItemRecyclerViewAdapter(DummyContent.ITEMS, spanCount)
layoutManager = GridLayoutManager(context, spanCount)
addItemDecoration(RecyclerGridDecoration(context))
}
button = …
Run Code Online (Sandbox Code Playgroud) 我还是一个C++新手.刚刚开始读到类的静态成员函数不是特定于对象的 - 所有对象的成员函数都有一个副本.
现在我脑子里出现了两个问题:
普通函数和静态函数"仅在内存分配方面"有什么区别?
如果成员函数包含一些局部变量怎么办?在这种情况下,函数"应该"具有该变量的单独副本 - 特定于调用该函数的对象...如何在C++中解决此问题?
谢谢 !
我正在使用Kotlin入门指南首次在IntelliJ IDEA上使用以下配置设置Kotlin:
IntelliJ IDEA 2017.2.5
Build #IC-172.4343.14, built on September 26, 2017
JRE: 1.8.0_152-release-915-b12 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.11.6
Run Code Online (Sandbox Code Playgroud)
我使用以下代码在新的Kotlin项目中创建了一个App.kt文件:
fun main(args: Array<String>) {
println("hello")
}
Run Code Online (Sandbox Code Playgroud)
在通过IDE运行代码时,我收到以下错误:
Error:Internal error: (java.lang.VerifyError) Uninitialized object exists on backward branch 90
Exception Details:
Location:
org/jetbrains/kotlin/jps/build/KotlinBuilder.createCompileEnvironment(Ljava/util/Map;Lorg/jetbrains/kotlin/incremental/components/LookupTracker;Lorg/jetbrains/jps/incremental/CompileContext;Lorg/jetbrains/kotlin/jps/build/KotlinBuilder$MessageCollectorAdapter;)Lorg/jetbrains/kotlin/compilerRunner/JpsCompilerEnvironment; @171: goto
Reason:
Error exists in the bytecode
Bytecode:
0000000: bb03 fe59 b703 ff3a 0619 063a 0719 0713
0000010: 02d7 2cb6 0403 5719 0713 0405 bb04 0759
0000020: 2b3a …
Run Code Online (Sandbox Code Playgroud) 我这里没有具体的问题; 只需要一些设计指南.
我在Node.js,MQTT和Websockets上看到了这篇文章.我想我们可以使用Node/Java + ActiveMQ + Websockets实现类似的目的.我的查询是如何在MQ和MQTT之间进行选择的?与ActiveMQ相比,我能否安全地在大中型项目中使用像mosquitto这样的"开放式"服务器?
本文有一些见解,似乎我应该同时使用MQ和MQTT,因为如果我将来获得轻量级客户端,MQTT可能会有所帮助.
谢谢 !
我需要一些帮助来理解使用CountDownLatch优于传统的wait-notify的优点.我认为notifyAll()确实做了同样的事情,它似乎更容易使用(也许是因为熟悉).
另外,来自CountDownLatch的wait()和await()有什么区别?
谢谢 !
编辑:我想我需要改写我的查询:
Await()根据文档说:
除非线程被中断,否则导致当前线程等待锁存器倒计数到零.
对我来说很难看出wait()和await()之间的区别 - await()确实在封面下使用了wait(),而且当count到零时似乎有一个隐式的notifyAll().
我的意思是,为什么我不应该简单地使用wait-notifyAll()机制(使用我自己的计数器变量处理),而不是去CountDownLatch?
我是Android动画的新手,正在阅读介绍性文章.该开发人员指南说,观看动画是一个老的系统和易于使用的
作为一个初学者,我应该随时投资了解视图动画的工作原理,还是应该完全专注于属性动画?是否有某些属性动画无法做到?对于像旋转/翻译这样简单的东西,使用属性动画"相对"非常困难吗?
根据我目前的阅读,Behavior
只能适用于CoordinatorLayout
. 但是下面的代码让我很困惑:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
tools:context=".ScrollingActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:fitsSystemWindows="true"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@android:color/holo_red_light"
app:layout_scrollFlags="scroll"
app:toolbarId="@+id/toolbar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="parallax"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ScrollingActivity"
tools:showIn="@layout/activity_scrolling">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:text="@string/large_text" />
</android.support.v4.widget.NestedScrollView>
</FrameLayout>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test Button"
android:visibility="visible"
android:layout_gravity="bottom"
app:layout_anchor="@id/nestedScrollView"
app:layout_behavior="am.i.coord.CustomBehavior"
/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
该NestedScrollView
不是直接孩子CoordinatorLayout
(被包裹在一个FrameLayout里),但仍然有一个Behavior
应用,这是正确的触发AppBarLayout变化。
在Button
我在一个自定义同级别增加 …