我是Android应用程序开发的新手,在研究基本的android组件时,我在意图和内容提供者之间感到困惑,因为它们都被用于将数据从一个应用程序/组件发送到另一个应用程序/组件.在意图的情况下,我们可以使用bundle或extras发送数据,那么我们为什么要使用内容提供者.有人可以用一个例子向我解释一下.
我们也可以使用内容提供商访问android中的数据库,这是我们使用内容提供商的唯一原因吗?
我是Android应用程序开发的新手,在阅读谷歌的Android文档时,我遇到了android沙盒.这个术语的解释没有明确给出,所以我尝试搜索互联网,但找不到令人满意的东西.我知道这是与android内核linux内核提供的安全性有关.任何人都可以清楚地向我解释什么是沙箱以及它是如何工作的,因为它似乎是一个非常重要的主题.
在学习 android 中的多线程时,我对多线程在 cpu 中实际执行的方式感到困惑。我知道作为一个整体,cpu(单核)使用循环算法来运行各种进程,从而产生并行处理的错觉,但是 cpu 如何管理单个进程中的多个线程。
我已经读到,在为 android 开发应用程序时,我们必须从主/ui 线程中完成所有资源密集型工作,以便 ui 在执行密集工作时不会无响应,
但是
“因为单个核心 cpu 一次只能执行一个线程time" ,因此每当 cpu 忙于工作线程时,它可能不会运行 ui 线程,因此在该阶段,ui 不会因为 cpu 忙于工作线程而无响应。
因此多线程如何帮助?
我需要一个概念性的解释,可能是一个例子。
*************************编辑************************ ******
当工作线程正在运行时,当用户尝试与 ui 交互时会发生什么(我知道这几乎不可能,因为所有这些都发生在几毫秒内,但仍然会发生什么)?
我正在研究8085微处理器,发现它工作在3 Mhz上,例如需要4个时钟周期来进行操作码读取,3个时钟周期用于IO/M读取或写入.
那么现在,如果我以某种方式超频8085以10 Mhz工作,那么时钟周期的数量会减少吗?
或者循环次数保持不变但是3或4个完整循环的有效时间会减少?
这是我的链接列表的示例C++代码.这实际上不是一个链表而只是一个虚拟程序.我得到了这个程序的意外输出.
#include<iostream>
using namespace std;
struct list{
int data;
list *next;
};
void setData(list ob){
int d;
cout<<"enter data"<<endl;
cin>>d;
ob.data=d;
}
void getData(list ob){
cout<<"Data is :"<<ob.data<<endl;
}
int main(){
list node1,node2,node3;
setData(node1);
setData(node2);
setData(node2);
getData(node1);
getData(node2);
getData(node3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我对代码的输入是2,3和4.我得到的意外输出是 -
enter data
2
enter data
3
enter data
4
Data is :2293540
Data is :4201920
Data is :2293608
Run Code Online (Sandbox Code Playgroud)
编辑
struct list{
char data; list next;
}
void main(){
list *start,node1,node2;
//I got stuck on the below …
Run Code Online (Sandbox Code Playgroud) 假设我有一个程序,其中包含添加两个数字的指令,该操作需要10纳秒(常数,由门制造商强制执行).
现在我有3个不同的处理器A,B和C(其中A <B <C就时钟周期而言).
A的一个时钟周期为15纳秒,B为10纳秒,C为7纳秒.
首先,我是按照以下假设纠正的:
1.添加操作需要1个完整的处理器A循环(慢速处理器),并且浪费剩余的5 ns循环.
2.添加操作需要1个完整周期的处理器B浪费时间.
3.添加操作需要2个完整周期(20 ns)的处理器C(快速处理器),浪费20-14 = 7 ns的其余部分.
如果上述假设是正确的,那么这与具有高时钟周期的处理器更快的常规假设不矛盾.
这里最快的处理器C实际上需要2个周期并且浪费7ns,而较慢的处理器A仅需要1个周期.