android笔记
来源:互联网 发布:mac壁纸 2560x1440 编辑:程序博客网 时间:2024/06/04 17:46
1、Activity和FragmentActivity
import android.app.Activity;public class WelcomeActivity extends Activity {
import android.support.v4.app.FragmentActivity;public class WelcomeActivity extends FragmentActivity {fragmentactivity 继承自activity,提供了操作fragment的一些方法,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入android-support-v4.jar兼容包,
同时继承fragmentActivity,这样在activity中就能嵌入fragment来实现你想要的布局效果。
2、Bundle
Bundle很容易可以发现会作为参数出现在每一个activity类中重写父类的onCreate方法里
@Overrideprotected void onCreate(Bundle arg0) {// TODO Auto-generated method stubsuper.onCreate(arg0);通过研究Activity源码
protected void onCreate(Bundle savedInstanceState) { if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState); if (mLastNonConfigurationInstances != null) { mAllLoaderManagers = mLastNonConfigurationInstances.loaders; } if (mActivityInfo.parentActivityName != null) { if (mActionBar == null) { mEnableDefaultActionBarUp = true; } else { mActionBar.setDefaultDisplayHomeAsUpEnabled(true); } } if (savedInstanceState != null) { Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); mFragments.restoreAllState(p, mLastNonConfigurationInstances != null ? mLastNonConfigurationInstances.fragments : null); } mFragments.dispatchCreate(); getApplication().dispatchActivityCreated(this, savedInstanceState); mCalled = true; }可以发现每一个自定义的activity类都会回调父类的onCreate方法
super.onCreate(arg0);
而且需写在第一行,完成一些像窗口初始化的工作。Bundle类是一个final类,封装一些key-value键值对,比较常用于两个activity之间的通讯,而activity之间的通讯通常是借助Intent类。
3、SharedPreferences
SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。
SharedPreferences sp; SharedPreferences.Editor editor; sp=WelcomeActivity.this.getSharedPreferences("sharedata", Context.MODE_PRIVATE); editor= sp.edit(); editor.putString("name", "name"); editor.putString("pass", "pass"); editor.commit();运行后会生成对应的SharedPreferences数据存储文件sharedate.xml
sharedata.xml内容则是所设置的vey-value
<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map> <string name="name">name</string> <string name="pass">pass</string></map>SharedPreferences常用的属性和方法
public abstract boolean contains (String key):判断SharedPreferences是否包含特定key的数据
public abstract SharedPreferences.Editor edit ():返回一个Edit对象用于操作SharedPreferences
public abstract Map<String, ?> getAll ():获取SharedPreferences数据里全部的key-value对
getXXX(String key,XXX defvlaue):获取SharedPreferences数据指定key所对应的value,如果该key不存在,返回默认值defValue。其中XXX可以是boolean、float、int、long、String等基本类型的值
Editor接口的常用方法
public abstract SharedPreferences.Editor clear ():清空SharedPreferences里所有的数据
public abstract boolean commit ():当Editor编辑完成后,调用该方法可以提交修改,而且必须要调用这个数据才修改
public abstract SharedPreferences.Editor putXXX (String key, boolean XXX):向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值
public abstract SharedPreferences.Editor remove (String key):删除SharedPreferences里指定key对应的数据项
Context.getSharedPreferences(String name,int mode):得到一个SharedPreferences实例
name:是指文件名称,不需要加后缀.xml,系统会自动为我们添加上。一般这个文件存储在/data/data/<package name>/shared_prefs下
mode:是指定读写方式,其值有三种,分别为:
Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写
Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写
Context.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。
4、service
android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。
Service 可以想象成一种消息服务,而你可以在任何有 Context 的地方调用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它。
Service分:本地服务(Local)、远程服务(Remote),本地服务依附在主进程上,主进程被Kill后,服务便会终止,如音乐播放服务。远程服务是独立的进程,如一些提供系统服务的Service,这种Service是常驻的,占用一定资源。
和Thread的关系,Thread 的运行是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如果你没有主动停止 Thread 或者 Thread 里的 run 方法没有执行完毕的话,Thread 也会一直执行。因此这里会出现一个问题:当 Activity 被 finish 之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不同的 Activity 中对同一 Thread 进行控制。
常用原型方法:onCreate()--创建、onStart--开始、onDestry()--释放。
以一个后台推送消息为例
Intent i=new Intent(HomeActivity.this,PushMessageService.class);i.putExtra("userCode", "userCode"); //消息推送 startService(i);
public class PushMessageService extends Service{ //获取消息线程 private MessageThread messageThread = null; //点击查看 private Intent messageIntent = null; private PendingIntent messagePendingIntent = null; //通知栏消息 public static int messageNotificationID = 1000; private Notification messageNotification = null; public NotificationManager messageNotificationManager = null; private int pagesize = 10;private int currentPage = 1;private RequestHandler handler;private String message=null;private MessagesDao dao;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}private String usercode="";@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {// TODO Auto-generated method stubdao=new MessagesDao(PushMessageService.this);setHandler();messageNotificationManager = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);messageNotification= new Notification();messageNotification.icon = R.drawable.icon;messageNotification.tickerText = "新消息";messageNotification.defaults = Notification.DEFAULT_SOUND;messageNotification.audioStreamType = android.media.AudioManager.ADJUST_LOWER;usercode=intent.getStringExtra("userCode");//单击查看//messageIntent= new Intent(this, TaskListActivity.class);//messageIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// messagePendingIntent= PendingIntent.getActivity(this, 0, messageIntent, PendingIntent.FLAG_ONE_SHOT);//开启线程通知MessageThread thread=new MessageThread();thread.isRunning=true;thread.start();return super.onStartCommand(intent, flags, startId);} private void setHandler(){ //final String message=null; handler=new RequestObjectHandler<Grid>(getApplicationContext()) {@Overridepublic void handleObject(Object arg0) throws Exception {// TODO Auto-generated method stubGrid grid = (Grid) arg0;List< Map<String,Object>> list =(List< Map<String,Object>>)grid.getList();if(list!=null){for(Map<String,Object>m:list){ String message=m.get("content")+""; String date_str = m.get("ftime")+""; int state = Integer.parseInt(m.get("state")+""); String msg_id = m.get("id")+""; Log.i("sqlite", m.toString());if(!StringUtil.isNnull(message)){ dao.insertMsgData(msg_id, message, date_str,state);}}//点击查看//messageIntent= new Intent(getApplicationContext(), TaskListActivity.class);// messageIntent.putExtra("message", message);//messageIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//messagePendingIntent= PendingIntent.getActivity(getApplicationContext(), 0, messageIntent, PendingIntent.FLAG_ONE_SHOT);} }}; } @SuppressLint("NewApi")class MessageThread extends Thread{ //运行状态 public boolean isRunning = true; @Override public void run() { while(isRunning){ try { getMessage(); //休息10秒 Thread.sleep(10000); if(message!=null){ //设置消息内容和标题 NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); builder.setContentTitle("您有新消息!"); builder.setContentText(message); messageNotification = builder.build(); //发布消息 messageNotificationManager.notify(messageNotificationID, messageNotification); //避免覆盖消息,采取ID自增 messageNotificationID++; message=null; } Thread.sleep(10000); } catch (Exception e) { e.printStackTrace(); } } } //获取服务器消息 public void getMessage(){ try{ String username=usercode;//"15915728259";//shareUtil.getValue(SharedPreferencesUtil.STR_USERCODE); Integer state=0; Map<String, Object> params = new HashMap<String, Object>(); params.put("pageSize", pagesize); params.put("currentpage", currentPage); params.put("users", username); params.put("state", state); params.put("role", "app"); String url = Config.getUrl("getSimpleMessage_url"); Request.post(url, params, handler,""); }catch(Exception e){ //Toast.makeText(HomeActivity.this, "22222", Toast.LENGTH_SHORT).show(); } } }}
- android笔记
- android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android 笔记
- android笔记
- Android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android笔记
- android笔记
- android 笔记
- android 笔记
- Android笔记
- 利用sharedPreference来保存我们的登录信息
- SEO基础操作手法
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- python 翻译
- 跨平台APP----使用DCloud公司产品跨平台开发(系列三)
- android笔记
- junit学习
- 2象棋(1)16象棋(2)
- Mysql数据库
- 网站SEO优化:遇到死链接就这样解决
- HDU ACM 11 2044 一只小蜜蜂...
- 3622 假期(DP+单调队列优化)
- 在CSDN的CODE平台上进行项目的版本控制@git
- Spring使用支付宝扫码支付