安卓第九天笔记-Activity
安卓第九天笔记-Activity
1.创建Activity
一个界面对应一个activity
创建一个Activity
1.写一个JAVA类,继承Activity
publicclass CalcActivity extends Activity {
2.为这个Activity写一个布局文件
3.在Activity中重写OnCreate()方法,并设置显示的内容setContentView(R.layout.xxx)xxx表示布局文件的名称
4.在Manifest.xml文件中为Activity注册
<activity android:name="com.itheima.rp.CalcActivity"></activity>
2.人品计算器
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".LogoActivity" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo"/>
</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="人品计算器"
android:textColor="#66ff0000"
android:textSize="32sp" />
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入您的姓名" />
<Button
android:onClick="calc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="计算"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
LogoActivity
/**
* Logo界面
* @author 刘楠
*
* 2016-2-25下午6:47:07
*/
public class LogoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logo);
//打开后显示的LOGO界面
new Thread(){
public void run() {
//显示5秒后连接到切换到下一个Activity
SystemClock.sleep(5000);
startActivity(new Intent(LogoActivity.this, CalcActivity.class));
//关闭掉这个Activity不然后退就又回到Logo界面了
finish();
};
}.start();
}
}
CalcActivity
/**
* 创建一个Activity
* 1.写一个JAVA类,继承Activity
* 2.为这个Activity写一个布局文件
* 3.在Activity中重写OnCreate()方法,并设置显示的内容setContentView(R.layout.xxx)xxx表示布局文件的名称
* @author 刘楠
*
* 2016-2-25下午6:33:59
*/
public class CalcActivity extends Activity {
private EditText et_name;
private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置要显示的内容布局文件
setContentView(R.layout.activity_calc);
et_name = (EditText) findViewById(R.id.et_name);
tv_result = (TextView) findViewById(R.id.tv_result);
}
/**
* 计算人品
* @param v
*/
public void calc(View v){
//获取名称
String name = et_name.getText().toString().trim();
if(TextUtils.isEmpty(name)){
Toast.makeText(this, "姓名不能为空", Toast.LENGTH_SHORT).show();
return;
}
//不为空就开始计算
byte[] bytes = name.getBytes();
//结果
int sum=0;
for (byte b : bytes) {
int tmp=b&0xff;
sum+=tmp;
}
//开始计算人品
int rp=sum/100;
if (rp>9) {
tv_result.setText("人名:"+name+"--->人品:"+rp+"===人品帅到掉渣,当世的活菩萨");
}else if(rp>6){
tv_result.setText("人名:"+name+"--->人品:"+rp+"===一般一般世界第三,");
}else{
tv_result.setText("人名:"+name+"--->人品:"+rp+"===上辈子没有干坏事,好好活着");
}
}
}
计算和结果都在一个界面完成的,
下面再加一个界面只用于显示结果
并把图片带过去
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结果显示"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Activity
更改CalcActivity
//开始计算人品
String str;
int rp=sum/100;
if (rp>9) {
str="人名:"+name+"--->人品:"+rp+"===人品帅到掉渣,当世的活菩萨";
}else if(rp>6){
str="人名:"+name+"--->人品:"+rp+"===一般一般世界第三,";
}else{
str="人名:"+name+"--->人品:"+rp+"===上辈子没有干坏事,好好活着";
}
// 发送数据到另外一个Activity
Intent intent = new Intent();
intent.setClass(this, ResultActivity.class);
//添加数据字符串
intent.putExtra("data", str);
//把图片的ID放时去
intent.putExtra("rp", R.drawable.logo);
startActivity(intent);
结果页面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结果显示"/>
<ImageView
android:id="@+id/iv_display"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结果显示"/>
</LinearLayout>
/**
* 创建一个Activity
* 1.写一个JAVA类,继承Activity
* 2.为这个Activity写一个布局文件
* 3.在Activity中重写OnCreate()方法,并设置显示的内容setContentView(R.layout.xxx)xxx表示布局文件的名称
* @author 刘楠
*
* 2016-2-25下午6:33:59
*/
public class ResultActivity extends Activity {
private TextView tv_result;
private ImageView iv_display ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置要显示的内容布局文件
setContentView(R.layout.activity_result);
tv_result = (TextView) findViewById(R.id.tv_result);
iv_display = (ImageView) findViewById(R.id.iv_display);
//获取Intent
Intent intent = getIntent();
//获取数据
String data = intent.getStringExtra("data");
//设置值
tv_result.setText(data);
//获取图片
int rpMap = intent.getIntExtra("rp", 0);
//设置图片
iv_display.setImageResource(rpMap);
}
}
3.使用Intent传递多种数据
3.1传递简单数据
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//传递普通数据
intent.putExtra("name", "张三");
intent.putExtra("age", 18);
intent.putExtra("flag", true);
startActivity(intent);
3.2传递复杂数据
1.传递一个对象,对象的类要实现Parcelable
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//传一个对象
//前提 是person实现了Parcelable接口
Person person = new Person("刘楠", 30);
intent.putExtra("person", person);
startActivity(intent);
获取
Intent intent = getIntent();
//获取数据n
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 2);
boolean flag = intent.getBooleanExtra("flag", false);
Person p=intent.getParcelableExtra("person");
Toast.makeText(this,p.toString(), Toast.LENGTH_SHORT).show();
实际上只要让javaBean实现Serializable 接口就可以了,不管是传递单个对象,或者是传递一个集合,都没问题。
4. 启动界面的两种方式
4.1显示意图
只要指定上下文,和具体的类就可以跳转
> 能够直接知道跳转的界面
注册:
<activity android:name="com.itheima.start.Activity01"></activity>
跳转:
Intent intent = new Intent(this , Activity01.class);
startActivity(intent);
作用: 一般是启动自己程序的界面,其他程序的界面通过这种方式无法启动
如果使用了显式手法注册,还想被其他应用程序打开, 那么可以在activity标签里面,加上
android:exported="true"
4.2 隐匿意图
不知道要打开的界面是什么样子的,只有运行了才知道
要指定Action与data才可以
/**
* 显示意图打开Activity02
* @param v
*/
public void click1(View v){
Intent intent = new Intent();
intent.setClass(this, SencondActivity.class);
startActivity(intent);
}
<activity android:name="com.itheima.intentstart.SencondActivity"></activity>
隐匿意图要指定Action,
<!--隐匿意图 -->
<activity android:name="com.itheima.intentstart.SencondActivity">
<intent-filter >
<!--Action -->
<action android:name="com.itheima.intentstart.Second"/>
<!--设置为默认的 -->
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
/**
* 隐式意图打开Activity02
*
* @param v
*/
public void click2(View v) {
Intent intent = new Intent();
intent.setAction("com.itheima.intentstart.Second");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
4.3 参数
作用: 跳转其他的应用程序界面,或者是自己的应用程序界面想被其他的程序打开
详细参数:
- action: 动作
- category 分类
- data: 指定数据, 一般关注两个:scheme 和 mimetype
- android:scheme="itheima" android:path="www.itheima" android:mimeType="text/plain"
4.4隐匿意图打打SMS
<Button
android:onClick="shareSms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打开手机短信" />
/**
* 隐匿意图 打开手机SMS界面
* 源码
* <intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
</intent-filter>
* @param v
*/
public void shareSms(View v){
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
intent.setData(Uri.parse("sms:"));
//设置数据
intent.putExtra("sms_body", "这是要传过去的内容");
startActivity(intent);
}
点击按键,显示界面
4.5 打开浏览器
/**打开系统的浏览器
* <intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />
</intent-filter>
* @param v
*/
public void onOPenBrower(View v){
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
5.多个Activity之间获取数据与传递
打开下一个界面,然后返回数据
场景
QQ聊天给好友发送图片 (拍照返回、 相册选取)
选择联系人与短信模版把选择到的内容显示在指定的位置

主界面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="短信发送助手"
android:textSize="30sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/et_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20sp"
android:hint="请输入联系人" />
<!-- 选择联系人 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:onClick="selectContact"
android:text="+" />
</RelativeLayout>
<EditText
android:id="@+id/et_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20sp"
android:hint="请输入短信内容"
android:minLines="8" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="selectSms"
android:text="选择短信模版" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="sendSms"
android:text="发送" />
</LinearLayout>
短信列表
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<!--短信列表 -->
<ListView
android:id="@+id/lv_sms"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
联系人列表
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<!--联系人列表 -->
<ListView
android:id="@+id/lv_contact"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
主界面
/**
* 通过选择联系人,与模版把选择到的内容显示在指定的位置 1.建立布局.设置点击事件 2.跳转到选择页面 3.使用ListView展示数据
* 4.为ListView设置OnItemClickListener监听器与事件把选择到的数据返回给请求 Activity
* 5.关闭选择的Activity结束finish() 6
*
* @author 刘楠
*
* 2016-2-25下午10:01:28
*/
public class MainActivity extends Activity {
/*
* 联系人
*/
private EditText et_contact;
/*
* 内容
*/
private EditText et_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_contact = (EditText) findViewById(R.id.et_contact);
et_content = (EditText) findViewById(R.id.et_content);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//判断返回的intent是否为空
if(data==null){
return ;
}
//跟所请求码区别是什么结果
switch (requestCode) {
case 100:
//设置连联系人
et_contact.setText(data.getStringExtra("contact"));
break;
case 200:
//设置内容
et_content.setText(data.getStringExtra("content"));
break;
}
}
/**
* 选择联系人
*
* @param v
*/
public void selectContact(View v) {
Intent intent = new Intent();
intent.setClass(this, ContactActivity.class);
/*
* requestCode:随意写, 如果一个页面内有多个请求结果的要区分
*/
startActivityForResult(intent, 100);
}
/**
* 选择SMS模版
*
* @param v
*/
public void selectSms(View v) {
Intent intent = new Intent();
intent.setClass(this, SmsActivity.class);
/*
* requestCode:随意写, 如果一个页面内有多个请求结果的要区分
*/
startActivityForResult(intent, 200);
}
/**
* 发送SMS
*
* @param v
*/
public void sendSms(View v) {
String number = et_contact.getText().toString().trim();
String body = et_content.getText().toString().trim();
if(TextUtils.isEmpty(number) || TextUtils.isEmpty(body)){
Toast.makeText(this, "手机号或者内容不能为空", Toast.LENGTH_SHORT).show();
return ;
}
/*
* 发送短信
*/
SmsManager manager = SmsManager.getDefault();
//拆分短信
ArrayList<String> divideMessage = manager.divideMessage(body);
for (String str : divideMessage) {
manager.sendTextMessage(number, null, str, null, null);
}
}
}
短信列表
/**
* 短信模块列表显示
* @author 刘楠
*
* 2016-2-25下午9:48:12
*/
public class SmsActivity extends Activity {
protected static final String TAG = "SmsActivity";
private ListView lv_sms;
private String [] objects={
"短信模块列表显示内容1",
"短信模块列表显示内容2",
"短信模块列表显示内容3",
"短信模块列表显示内容4",
"短信模块列表显示内容5",
"短信模块列表显示内容6",
"短信模块列表显示内容7",
"短信模块列表显示内容8",
"短信模块列表显示内容9",
"短信模块列表显示内容10",
"短信模块列表显示内容11",
"短信模块列表显示内容12",
"短信模块列表显示内容45",
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms_item);
lv_sms = (ListView) findViewById(R.id.lv_sms);
lv_sms = (ListView) findViewById(R.id.lv_sms);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, objects);
//配置监听器
lv_sms.setAdapter(adapter);
//设置监听事件
lv_sms.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i(TAG, "position:"+position);
Log.i(TAG, "元素:"+objects[position]);
//返回返回resultCode 响应码
Intent intent = new Intent();
//保存传递的数据
intent.putExtra("content", objects[position]);
//调置结果
setResult(200, intent);
//结束
finish();
}
});
}
}
联系人列表
/**
* 联系人列表显示
* @author 刘楠
*
* 2016-2-25下午9:48:12
*/
public class ContactActivity extends Activity {
protected static final String TAG = "ContactActivity";
private ListView lv_contact;
private String [] objects ={
"5556",
"13800138000",
"13800138012",
"13800138023",
"13800138004",
"13800138025",
"13800138306",
"13800138007",
"13800138069",
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_item);
lv_contact = (ListView) findViewById(R.id.lv_contact);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, objects);
//配置监听器
lv_contact.setAdapter(adapter);
//设置监听事件
lv_contact.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i(TAG, "position:"+position);
Log.i(TAG, "元素:"+objects[position]);
//返回返回resultCode 响应码
Intent intent = new Intent();
//保存传递的数据
intent.putExtra("contact", objects[position]);
//调置结果
setResult(200, intent);
//结束
finish();
}
});
}
}
添加权限
<uses-permission android:name="android.permission.SEND_SMS"/>
6.生命周期

###Activity生命周期
* 生命周期
> 一类从出生到消亡的过程(时间段)
* 生命周期方法
> 对象从创建到销毁,所调用的方法。
* 创建与销毁
> onCreate 和 onDestroy 数据的保存和回显工作
* 可见与不可见
> onStart 和 onStop 可见的时候播放视频,不可见的时候暂停视频的播放
* 获取焦点和失去焦点
> onResume 和 onPause
###生命周期总结
* entire lifetime
> 完整生命周期 onCreate-- onStart-- onResume -- onPause -- onStop -- onDestroy
* visible lifetime
> 可视生命周期 : onStart() -- onResume -- onPause -- onStop
* foreground lifetime
> 前台生命周期: onResume -- onPause
正常的生命周期
一个APP打开到退出
打开最小化,---唤醒-->>退出


/**
* Activity生命周期
*/
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; /**
* 初始化
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Log.i(TAG, "======onCreate======="); } /*
界面可见时执行
*/ @Override
protected void onStart() {
super.onStart();
Log.i(TAG, "======onStart=======");
} /*
界面最小化后,再打开时执行
*/
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "======onResume=======");
} /*
界面最小化
*/
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "======onPause=======");
} /*
界面不可见
*/
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "======onStop=======");
} /**
* 退出Activity里执行
*/
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "======onDestroy=======");
} }
7横竖屏切换:
1. 直接规定了是什么方向显示
android:screenOrientation="landscape" |portrait
2. 不指定方向,横屏就横屏显示,竖屏就竖屏显示
android:configChanges="orientation|screenSize|keyboardHidden"
8任务和栈
* task
> 一个应用程序可以拥有多个界面,一个界面就可以看成是与用户交互的任务 task , 为了方便管理,所以android就使用一个栈来集中管理他们这些任务 , 如果一个应用程序的所有栈都已经清空了,那么这个应用程序也就完全退出了 , 一个应用程序可以拥有多个任务栈
* stack
> 栈 , 是一种数据结构 遵循的是后进先出, 队列 (Queue ) ,先进先出
9.Activity启动模式
* standard
> 这是默认的启动模式,: 启动多少次这个界面,就会有多少个这个界面实例被压入栈中
* singleTop
> 单一顶部模式:如果一个界面的实例已经存在栈顶,那么久不会再继续创建这个界面的实例,而是继续使用这个实例。 只要不是顶部,就与默认的模式一样。
> 场景: 为了避免出现一些奇怪的现象,为了避免让自己启动自己 短信编写界面*
* singleTask
> 单一任务模式:如果一个界面的实例已经存在栈中,那么再次启动就不会继续创建新的实例,而是继续复用它,并且把它与栈顶之间的其他实例全部移除掉。
> 场景: 为了减轻资源的消耗,在栈中值创建一次实例, 比如: 浏览器的界面
* singleInstance
> 全局唯一模式: 无论创建多少次都只有一个实例,并且这个实例放在一个独立的栈中,里面有且只能有它自己一个实例
> 场景: 为了减轻资源的消耗,在栈中值创建一次实例 比如: 通话界面或者紧急通话界面
安卓第九天笔记-Activity的更多相关文章
- Android学习笔记——Activity的启动和创建
http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html Android Activity学习笔记——Activity的启动和创建 ...
- Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation
原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...
- 【Android】安卓四大组件之Activity(二)
[Android]安卓四大组件之Activity(二) 前言 在这篇文章之前,我已经写过了一篇有关Activity的内容,是关于activity之间的页面跳转和数据传递,而这篇文章着重强调的是Acti ...
- 【Android】安卓四大组件之Activity(一)
[Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...
- 安卓学习笔记---Activity
由于学期实训的要求,我开始学习安卓了.从本月一号开始,学了五天了.时间短,刚学到的东西容易忘,我记一下笔记. 首先是对Activity的理解.activity首先是一个java类,我们创建一个新的ac ...
- 站在.NET的角度学安卓的草民笔记1
Java -> .NET 安卓 -> winform/WPF 类继承Activity -> 类继承 For ...
- 安卓app开发笔记
移动app应用开发也是信息技术课程科技创新的范畴,所以在个人开发app时候记录一些笔记,可能会很乱,所以选择按点来写. 首先是一些入门的资料,有很多需要自己学习的 https://www.oschin ...
- 安卓开发入门之activity
安卓开发主要用到的是java语言,对于一个activity,自己写的程序可以继承至Activity,该Activity先会运行一个叫 onCreat()的类,可以在其中申明一些初始化的函数等,这个函数 ...
- 学习安卓开发[2] - 在Activity中托管Fragment
目录 在上一篇学习安卓开发[1]-程序结构.Activity生命周期及页面通信中,学习了Activity的一些基础应用,基于这些知识,可以构建一些简单的APP了,但这还远远不够,本节会学习如何使用Ac ...
随机推荐
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
- 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?
什么是作用域链,什么是原型链. 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==>函数1作用域==>函数2作用域 作用域的特点就 ...
- 手把手教你搭建LyncServer2013之部署及配置监控功能(十八)
自弃用监控服务器角色以来,已对 Microsoft Lync Server 2013 监控基础结构进行了重大更改.不再采用不同的监控服务器角色(通常需要组织设置专用计算机来充当监控服务器),现在监控服 ...
- codeforces B. Strongly Connected City(dfs水过)
题意:有横向和纵向的街道,每个街道只有一个方向,垂直的街道相交会产生一个节点,这样每个节点都有两个方向, 问是否每一个节点都可以由其他的节点到达.... 思路:规律没有想到,直接爆搜!每一个节点dfs ...
- 【目录】C#操作Excel组件Spire.XLS系列文章目录
本博客所有文章分类的总目录链接:http://www.cnblogs.com/asxinyu/p/4288836.html 1.C#操作Excel组件Spire.XLS文章目录 1.[原创].NET读 ...
- DDD:使用EntityFramework的话,如果只为聚合根设计仓储,其它实体如何处理?
背景 DDD中只有聚合根可以有仓储,仓储负责整个聚合持久化的相关生命周期,在不使用工作单元或POCO的情况下,我们可以让Order内部直接调用DAL操作OrderItem.我们也可以让Order跟踪所 ...
- 关于JavaScript中apply与call的用法意义及区别
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. cal ...
- iOS-定时器
一.定时器的作用 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 二.定时器的种类 大概有三种方法:NSTimer.CA ...
- Mysql学习笔记(七)查(补充)
PS:五一还是要学习...虽然有点苦逼..但是路是自己选的,那么自己就要坚持的走下去... 学习内容: 1.数据库查找的补充... 查找涉及的东西比较多,在上一个章节没有完全介绍...我们还是以pet ...
- Redis设计与实现-持久化篇
redis数据库 默认16个数据库,每个数据库由一个redis.h/redisDb结构表示,此结构里的dict字典与expires字典,其中dict保存了该库所有键值对,此字典即为键空间:expire ...