android笔记

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方法里

	@Override
	protected void onCreate(Bundle arg0) {
		// TODO Auto-generated method stub
		super.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;
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	private String usercode="";
	
	
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		dao=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()) {
				@Override
				public void handleObject(Object arg0) throws Exception {
					// TODO Auto-generated method stub
					Grid 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();
      			}
          }
          
    }

}







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android笔记系统是一种可以帮助用户记录、整理和分享笔记的应用程序。以下是一些常见的Android笔记系统的特点和功能: 1. 笔记编辑:大多数Android笔记系统都提供了基本的文本编辑功能,用户可以输入、编辑和保存笔记。一些系统还允许用户插入图片、附件和链接等元素,以丰富笔记内容。 2. 分类和标签:许多Android笔记系统允许用户将笔记进行分类和标签,以便更好地组织和查找。这有助于用户根据主题、日期或其他标准将笔记分组,以便快速找到所需的资料。 3. 笔记共享:一些Android笔记系统允许用户将笔记分享到社交媒体平台或与其他人共享。用户可以选择将笔记以链接、邮件或其他形式发送给朋友或同事,以便他们能够方便地查看和评论笔记。 4. 搜索功能:许多Android笔记系统提供强大的搜索功能,用户可以根据关键词、标签或分类快速找到所需的笔记。 5. 提醒和日历集成:一些Android笔记系统与日历应用程序集成,允许用户设置提醒,以便在特定日期或时间提醒用户查看或更新笔记。 6. 云同步:大多数Android笔记系统都支持云同步功能,用户可以将笔记存储在云端,并在多个设备上访问。这有助于用户在不同设备之间同步笔记,并确保数据的安全性和可访问性。 7. 多平台支持:一些Android笔记系统还支持在多个平台上使用,包括iOS、Windows和Mac等。这为用户提供了更多的灵活性和选择。 总之,Android笔记系统为用户提供了一个方便、高效的方式来记录、整理和分享笔记。它们提供了各种功能和工具,以帮助用户更好地组织和查找信息,并与其他人共享和协作。选择一个适合自己的Android笔记系统,可以帮助您更有效地管理您的学习、工作或个人笔记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz_cl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值