当我们使用 AttachCurrentThread (JavaVM *vm, void **p_env, void *thr_args) 方法将 Cpp 线程附加到 Java 本机接口 (JNI) 时,从 Java 虚拟机的角度来看,C++ 线程实际上变成了外部线程( JVM)。
将本机 Cpp 线程附加到 JVM 后,如果我在附加线程上执行 pthread_join,或者附加线程在从 JVM 分离之前突然终止,是否会出现问题?
我的理解是,当使用 AttachCurrentThread 将本机线程附加到 JVM 时,JVM 会分配某些资源并维护内部数据结构来管理线程与 Java 对象的交互。如果线程在没有正确分离的情况下突然终止,这些资源可能无法释放,并可能导致内存泄漏或其他资源或 JVM 相关问题。
在上面的代码中,DeattachCurrentThread 变得无法访问,并且我已经执行了 pthread_exit (),这会导致与内存泄漏或任何其他问题相关的问题吗?
我的 Android 屏幕下部有一个 EditText,如图所示。由于一些项目限制,我应该只使用绝对定位。
单击 EditText 时,软键盘会隐藏 EditText,如另一幅图像所示。
我尝试将 android:windowSoftInputMode="adjustResize" 放入清单文件中(也尝试过 adjustmentPan)它仅适用于相对定位(下面注释了 textField_layoutparams 代码),但似乎不适用于绝对定位。
甚至尝试放置 ScrollView (下面的注释代码),但它不起作用。
代码:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val scrollView: ScrollView
val relativeLayout: RelativeLayout
val textField: EditText
/*scrollView = ScrollView (this)
scrollView.layoutParams = RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT
)*/
//scrollView.isFillViewport = true
//setContentView(scrollView)
relativeLayout = RelativeLayout(this)
relativeLayout.layoutParams = RelativeLayout.LayoutParams (
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT
)
relativeLayout.setBackgroundColor(Color.parseColor("#0000FF"))
//scrollView.addView(relativeLayout)
setContentView (relativeLayout)
textField = EditText(this)
val textField_layoutparams: LayoutParams
textField_layoutparams = RelativeLayout.LayoutParams …Run Code Online (Sandbox Code Playgroud) 我对 Kotlin 中的内存管理有基本的了解,即局部变量存储在堆栈中并由操作系统管理,对象在堆上创建并由 JVM 管理它们。此外,对象作为引用的副本传递,原始类型作为函数中的副本传递。
在下面的代码中,我创建了一个 TextEditOperation 函数,该函数以编程方式创建 EditText 并使用指令对象设置其属性,并向其添加 TextWatcher,最后将 edittext 视图添加到父相对布局。
public fun TextEditOperation (pInstructionSetIndex: Int, pInstructionIndex: Int): View?
{
val instruction: InstructionKernelAndroid
val context: Context?
val activity: Activity
val textedit: EditText
val parent_view: RelativeLayout
// fetch the instruction
instruction = InstructionSetMgr.uAndroidOSInstructionSetList[pInstructionSetIndex][pInstructionIndex]
// get activity's Context
context = ProcessStates.GetMainActivityContext ()
// cast activity's context to activity to use it's method
activity = context as Activity
// get parent view
parent_view = activity.findViewById (instruction.GetParentID ()) as RelativeLayout
// create …Run Code Online (Sandbox Code Playgroud)