Android学习笔记二

 Activity的生命周期:
   生命周期:一个对象从创建到销毁中间经历的状态。
  
   Activity状态迁移调用哪些方法:
   创建 —— 》 运行 (可见、可操作) :onCreate() onStart() onResume()
   运行 ---》 销毁 (关闭):  onPause() onStop() onDestroy()
   运行 ---》 暂停  (可见、不可操作): onPause()
              恢复到运行状态:      onResume()
             
   运行 ---》 停止 (不可见、又不可操作) onPause()  onStop()
              恢复到运行状态: onRestart() onStart() onResume()
             
   注意:当Activity处于暂停或停止状态,更高优先级的应用需要内存的话,
          Activity就有可能被杀死掉。
         
         
  数据持久化:把数据保存在外存。
         内存:RAM   掉电内容被清空掉
         外存:ROM   硬盘 U盘 光盘 SDCard
        
  利用生命周期去保存状态:
  1、onStop() 保存数据
  2、onStart() 恢复数据
 
  Android读写sdcard:
  1、权限(当调用到系统的服务或则硬件的时候要申请权限)
     清单文件 ——》 permission --》add --》 usepermission
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   
  2、sdcard路径:“/mnt/sdcard/xxx.xx”
 
 
  四大组件之一:
 service:服务:运行在后台没有界面。
 
 创建service要素:
 1、创建的类继承service
 2、重写onbind()方法;
 3、在清单文件里面注册:<service  android:name = "包名 + 类名">
 
 
 启动service的方法:
   在activity里面调用:startservice(intent);
   启动服务调用的生命周期: onCreate() onstartcommand();
  
   注意:第一次开启服务的时候会调用:onCreate() onstartcommand();
         在没有结束服务之前再次开启只会调用onstartcommand();
        
   注意:用startservice()开启的服务跟activity的关系比较松散,
         不会随着activity的关闭而关闭。
        
 关闭service的方法:
    stopService();
 
 
 
 绑定service的方法:
    Intent service = new Intent();
  service.setClass(this, MyService.class);
  bindService(service , conn, Context.BIND_AUTO_CREATE);
        参数:第一个:intent对象
              第二个:serviceconnection(必须声明成成员变量)
              第三个:Context.BIND_AUTO_CREATE
                      (调用绑定服务时,如果没有开启服务,则会自动开启服务)
           注意:通过bindservice()方法开启的服务跟activity连接比较紧密,
                 会随着activity的关闭而关闭
           注意:在service里面,onBind()必须有个返回值,没有的话返回null
     service:生命周期: oncreate()  onBind()
    
 解除绑定:
   
  unbindService(conn);
        参数:必须是bindservice()调用的第二个参数对象
       
  注意:当我们先用startservice()开启一个服务之后,再绑定服务,
        我们关闭activity,service不会随之关闭,只会解除绑定。
       
 Activity通过绑定的方式得到Service里面的方法:
 1、在Activity里面得到IBinder类型的对象:
    a、在service里面声明一个类Mybinder,继承Binder
    b、在Mybinder这个类里面创建一个方法区调用service里面的方法
    c、在onBind()里面返回MyBinder类型的对象
    d、在activity里面的ServiceConnection接口里面的onServiceconnnected()
       接收。但是我们得到是一个Binder类型的对象,所以要强制转换为
       Mybinder类型的。
       Mybinder mybinder = (Mybinder)service;
      
       通过mybinder对象就可以得到service里面方法返回的结果
      
   注意:onServiceconnnected()能被调用的前提是service里面onBind()
         返回一个非空的对象。
        
 
  BroadcastReceiver  广播接收者
 
  广播:Android系统里面信息传递都是以广播的形式(短信、电话……)
 
  系统接收外部的信息可以发送广播;
  应用本身也可以发送广播:
    Intent intent = new Intent();
    //设置广播的过滤条件
  intent.setAction("com.xinbo.www");
  //发送广播
  sendBroadcast(intent );
  
  
 接收广播:广播接收者。
 创建:
  1、继承BroadcastReceive
  2、在清单文件里面注册
  3、在清单文件里面设置要接收的广播的过滤条件
 
     onReceive()接收。
    
-----------------------------------------------------------------

1、接收系统广播: 接收短信
   1、权限:
   <uses-permission android:name="android.permission.RECEIVE_SMS"/>
   2、过滤条件:
   <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  
  
2、在code配置广播接收者的过滤条件:
   1、获取广播接收者对象:
      MyReceiver myReceiver = new MyReceiver();
     
   2、选一个时机注册广播(一般在onstart()里面)
      //设置过滤条件
   IntentFilter filter = new IntentFilter();
   filter.addAction("com.xinbo.www");
   //注册广播接收者
   registerReceiver(myReceiver, filter );
  3、选一个时机注销广播(一般在onStop()里面)
     unregisterReceiver(myReceiver);
    
    
两种广播注册的区别:
 1)清单文件注册 :  就算应用程序进程不存在,只要有匹配的广播就能接收。
 2)在代码里面注册:  比较灵活,可以自己控制时机。
 
 
Intent
   显示意图: 明确的指定的类名
   隐式意图: 没有明确指定类名,但是指定了过滤条件
  
   隐式意图打开activity:
  
   1、在发隐式意图的activity里面:
      Intent intent = new Intent();
   intent.setAction("org.yinan.www");
   startActivity(intent );
   
   2、在要打开的activity所在应用的清单文件里面配置activity的过滤条件
   <intent-filter>
      <action android:name="xxx.xxx.xxx" />

      <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
  
  
   思考:通过隐式意图开启另外一个应用的service
   1、通过隐式意图开启activity、然后通过activity去开启service
   2、通过隐式意图启动service
  
  
   显示意图跟隐式意图的区别:
  
   显示:启动目标:1个 (直接打开)                必须在同一个应用里面
   隐式:启动目标:多个 (多个的话出现选择列表)   可以跨应用
   
   
   
  
中级:

1、Android里面的通知系统
   作用:把一些应用的重要信息告知给用户。
  
  
   Toast :一般是在屏幕下方的黑色方框,显示一段时间后消失。
  
  
   Toast特性:
   1、Toast提示消息是不会获取焦点
   2、Toast提示消息过段时间会自动消失,不需要用户确认反馈。
   3、Toast提示消息在应用的其他页面还会存在,知道提示时间到了自动消失
  
   具体实现方法:
   1、通过Toast的静态方法makeText()创建一个Toast对象
    Toast.makeText(MainActivity.this, "提示一", Toast.LENGTH_LONG)
       参数:context: 指向activity本身
             Text: 文本:消息内容
             duration: 提示的时间: Toast.LENGTH_LONG   长
                                     Toast.LENGTH_SHORT  短
   2、得到对象之后记得要调用show();
  
  
  2、Notification:是显示在手机状态栏上面的通知。代表一种具有全局效果的通知。
 
     作用:来消息的时候在通知栏上面显示信息,当用户点击通知,
           就会打开一个界面显示详细信息
          
     使用场景: 时效性不是很强的消息
    
    
步骤:
 //1、得到一个消息管理器
mManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

//2、创建一个消息对象
Notification notification =
 new Notification(R.drawable.ic_launcher, "通知一",
                              System.currentTimeMillis());
//3、设置关联的Activity
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
//第四个参数:PendingIntent.FLAG_UPDATE_CURRENT
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent , 0);

//4、设置消息对象的具体内容
notification.setLatestEventInfo(this, "title", "message!",
                                               contentIntent );
                                              
    //消息被点击后消失
    notification.flags = Notification.FLAG_AUTO_CANCEL;
  //消息被点击后不会消失
  notification.flags = Notification.FLAG_ONGOING_EVENT;
                                            
//5、通过消息管理器发送消息
mManager.notify(123, notification ); 


取消通知:
  mManager.cancel(123);
 

3、对话框
   第一种:
   //获取一个辅助类Builder对象
  AlertDialog.Builder builder = new AlertDialog.Builder(this);
  //设置对话框内容
  builder.setTitle("对话框");
  builder.setMessage("通知一!!!!");
  builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    Toast.makeText(MainActivity.this, "对话框点击事件", Toast.LENGTH_SHORT).show();
   }
  });
  builder.setNegativeButton("取消", null);
  builder.setNeutralButton("应用", null);
  //创建对话框对象
  AlertDialog dialog = builder.create();
  //把对话框展示出去
  dialog.show();
  
 第二种:
 (1)执行showDialog(id);
 (2)重写onCreateDialog()
        返回一个dialog对象。
       
       
菜单:
  1、选项菜单:optionmenu;
    (1) a、在onCreateOptionsMenu():
             menu.add(0, 1, 0, "设置").setIcon(R.drawable.ic_launcher);
         b、点击事件:
            onOptionsItemSelected():
          
   (2)xml
        a、在onCreateOptionsMenu():
           //菜单布局转换器
           MenuInflater menuInflater = getMenuInflater();
          menuInflater.inflate(R.menu.one, menu);
       b、点击事件:
            onOptionsItemSelected():
           
 2、上下文菜单:ContextMenu 
    步骤:
     a、为某个控件注册上下文菜单:registerForContextMenu(控件对象)
     b、在Activity里面重写onCreateContextMenu();
        根据控件的id 进行添加
     c、点击事件:onContextItemSelect();
    
 选项菜单跟上下文菜单的区别:
 1)触发方式不一样:选项菜单按menu键,上下文菜单要长按(比较隐蔽)
 2)弹出方式也不一样:选项菜单在界面底部。上下文菜单在界面中间
 3)作用范围也不一样:选项菜单:Activity。上下文菜单:view
 4)创建的时候调用创建方法的次数也不一样:
     onCreateOptionmenu() 只有第一次创建的时候调用一次
     onCreateContextMenu()  每次触发就会被调用
     
     
        
     
     
 
         
    
       
          
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值