我的应用程序在Emulators中运行良好,甚至在android studio安装的实际设备中用于调试目的,但如果使用apk文件手动安装它会崩溃.
我准备粘贴任何其他代码,如活动,如果需要.
这是logcat:
04-14 12:20:44.392 6220-6220/? I/art: Late-enabling -Xcheck:jni
04-14 12:20:44.465 6220-6220/test.planner W/System: ClassLoader referenced unknown path: /data/app/test.planner-1/lib/arm
04-14 12:20:44.467 6220-6220/test.planner I/InstantRun: starting instant run server: is main process
04-14 12:20:44.470 6220-6220/test.planner D/AndroidRuntime: Shutting down VM
04-14 12:20:44.471 6220-6220/test.planner E/AndroidRuntime: FATAL EXCEPTION: main
Process: test.planner, PID: 6220
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{test.planner/test.planner.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "test.planner.MainActivity" on path: DexPathList[[zip file "/data/app/test.planner-1/base.apk"],nativeLibraryDirectories=[/data/app/test.planner-1/lib/arm, /vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417) …Run Code Online (Sandbox Code Playgroud) 试图在cardView( androidx.cardview.widget.CardView)周围做一些边框
这是代码:
<androidx.cardview.widget.CardView
android:id="@+id/cardView"
android:layout_width="273dp"
android:layout_height="118dp"
android:layout_marginStart="9dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="9dp"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
android:orientation="vertical"
app:cardCornerRadius="8dp"
android:background="@drawable/fix_border"
app:strokeColor="#dedede"
app:strokeWidth="3dp">
</androidx.cardview.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
结果:
还尝试使用自定义形状作为背景 ( fix_border.xml),也不起作用。
fix_border.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="2dp"
android:color="#dedede" />
<!-- <solid android:color="#ffffff" />-->
<padding
android:bottom="7dp"
android:left="7dp"
android:right="7dp"
android:top="7dp" />
</shape>
Run Code Online (Sandbox Code Playgroud) android material-design android-cardview material-components-android androidx
看看这段代码,它是链表的一部分.
int main()
{
List* head1 = NULL;
insertFront(&head1, 1);
insertFront(&head1, 2);
print(head1);
free(head1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一个功能是:
void insertFront(List** head, int value)
{
List* node = (List*)malloc(sizeof(List));
node->data = value;
node->next = NULL;
node->next = *head;
*head = node;
//free(node); essentially I am not freeing node
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
我的代码是否会导致内存泄漏问题?
我是否需要为节点(在函数内部)释放已分配的内存(动态)?
如果我释放head1,那么为节点分配的内存是否也会被释放?如果是,那怎么样?
释放后指针的值是否为NULL?
int* p = malloc(sizeof(*p));
free(p);
if(p==NULL)
printf("Null\n");
else
printf("Not null\n");
Run Code Online (Sandbox Code Playgroud)
输出:
Not null
Run Code Online (Sandbox Code Playgroud)
好吧,我假设没有;
无论如何,我今天早些时候提出了一个问题:
在这里查看: C - 如何释放动态分配的内存?
List* head1 = NULL;
insertFront(&head1, 1);
insertFront(&head1, 2);
print(head1);
while (head1)
{
List *temp = head1;
head1 = head1->next;
free(temp);
}
if(head1 == NULL)
printf("Null\n");
else
printf("Not null\n");
Run Code Online (Sandbox Code Playgroud)
这种情况下的输出:
Null
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在释放head1(节点也)后,head1变为null,不是吗?
最后,我错过了一些概念吗?
head1为null,但p不是.
我的问题是:
为什么head1和p之间的值不同?
android ×2
c ×2
androidx ×1
crash ×1
free ×1
java ×1
material-components-android ×1
memory-leaks ×1
pointers ×1