2021年的倒数第二天,公司的员工基本都回家了,手上也没啥工作了, 之前接过IOS和android SDK , 都是照着文档复制粘贴, 现在有空,了解一下安卓知识, 《第一行代码》这本书虽然有些老旧,但是作者写的还是很仔细的,安卓的知识点对比Unity和UE4中的概念,理解起来还是比较容易的,感谢作者!
//Toast
Toast.makeText(TestActivity.this,"I Click Btn",Toast.LENGTH_LONG).show();
//Menu
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(@NonNull MenuItem item)
//===================================Activity=================================
活动是可以叠层的,新活动覆盖在就活动上面,Back键会销毁最上面的活动,这不就是栈的概念么
Android使用Task管理活动,一个Task就是一组存放在栈中的活动集合
//活动的4种状态
运行状态(栈顶) 暂停状态(非栈顶,但可见) 停止状态(非栈顶,不可见) 销毁状态
//活动的7个生命周期
onCreate() //初始化操作
onStart() //不可见变为可见时调用, 相当于 OnVisible() //加载资源
onResume() // OnTop() //栈顶
//------------------------------------
onPause() // OnNotTop() //退出栈顶
onStop() // 相当于 OnInvisible(), 对话框式活动,OnStop不执行 //释放资源
onDestroy()
//---------
onRestart() // 相当于OnEnable()
//---------
//活动被销毁,如何保存临时数据:
onSaveInstanceState(Bundle outState) //保存临时数据,在销毁活动之前一定会被调用
// 在OnCreate方法种恢复数据
// Bundle也可以和Intent结合使用,把Bundle嵌入Intent中
活动的4种启动模式: standard, singleTop, singleTask, singleInstance
standard 模式, 每启动一个活动,它就会在返回栈种入栈, 问题是,有时候活动已经在栈顶,再次启动活动还会创建新的实例
singleTop: 启动活动时,如果发现返回栈栈顶已经是该活动,则直接使用; 如果该活动不在栈顶,则会实例化一个
singleTask: 从栈顶逐一出栈,直到发现该活动的实例, 保证了整个应该程序只有一个该活动
singleInstance:用单独的一个返回栈来管理该活动, 方便给其他程序调用
----------------------------------------------------------------------------
//1. 如何实时知道当前是哪一个活动
创建一个普通的Java类,改变活动的继承关系
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d("BaseActivity",getClass().getSimpleName());
}
}
--------------------------------------------------------------------------
//2. 随时随地退出程序
使用一个集合类对所用活动进行管理,调用 ActivityCollector.finishAll() 即可
public class ActivityCollector{
public static List<Activity> activities=new ArrayList<>();
public static void AddActivity(Activity act){
activities.Add(act);
}
public static void RemoveActivity(Activity act){
activities.remove(act);
}
public static void finishAll(){
for(Activity item:activities){
if(!item.isFinishing()){
item.finish();
}
}
//销毁完活动杀掉当前进城,保存程序完全退出
//android.os.Process.killProcess(android.os.Process.myPid());
}
}
public class BaseActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d("BaseActivity",getClass().getSimpleName());
ActivityCollector.AddActivity(this);
}
@Override
protected void onDestroy(){
super.onDestroy();
ActivityCollector.RemoveActivity(this);
}
}
--------------------------------------------------------
//3. 启动活动的最佳写法
//在SecondActivity种实现该函数
public static void actionStart(Content content,String data1,String data2){
Intent intent=new Intent(content,SecondActivity.class); //从 参数A活动,跳转到参数B活动
intent.putExtra("Param1",data1);
intent.putExtra("param2",data2);
content.startActivity(intent);
}
//调用 从 Fisrt 到 Second
SecondActivity.actionStart(FirstActivity.this,"data1","data2");
------------------------------------------------------
finish() //销毁当前活动
startActivity()
startActivityForResult() //能够返回结构给上一个活动
setContentView(R.layout.activity_main);
findViewById()
//========================================Intent=====================================
//Intent 拨打电话
Intent intent=new Intent(Intent.ACTION.DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
//Intent 打开百度
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
//Intent 传递数据
String data="Hello";
Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra",data);
startActivity(intent);
//Intent 取出数据
Intent intent=getIntent();
String data=intent.getStringExtra("extra");
Log.d("SecondActivity",data);
//Intent 获取SecondActivity的结果
//FirstActivity
Intent intent=new intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1); //第一个参数为Intent, 第二个参数为请求码
//FirstActivity重写 onActivityResult()处理结果
Switch(requestCode){
case 1:
if(requestCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
}
//Intent SecondActivity中传递结果
Intent intent=new intent();
intent.putExtra("data_return","Hell FirstActivity");
setResult(RESULT_OK,intent); //第一个参数返回处理结果,第二个参数传递intent, intent中带有数据
finish();
//如果用户不是通过点击按钮回到FirstActivity,而是按下Back键呢?
把上面点击事件的代码,重写到 onBackPressed()
//============================AndroidManifest===========================
<action android:name="android.intent.action.MAIN" /> //主活动
<category android:name="android.intent.category.LAUNCHER" />
android:theme="@android:style/Theme.Dialog"> //对话框式活动
android:lanchMode="singleTop" //活动启动模式