乐助理_产品总结

乐助理_产品总结本文详细介绍了移动开发领域的核心内容 包括 Android iOS 小程序等开发技术 以及服务管理中的启动 停止 广播接收等功能

大家好,欢迎来到IT知识分享网。

程序流程: 服务器 nodejs

 

1. 广播接收者:  .task.AssistReceiver   

   接收信息有 android.intent.action.BOOT_COMPLETED 开机完成广播 —> 启动服务。
              android.intent.action.PHONE_STATE  手机状态广播 —>  
              android.net.conn.CONNECTIVITY_CHANGE  网络连接广播 —>  
              android.intent.category.LAUNCHER    程序启动广播 —> 改变网络连接。
              Intent.ACTION_TIME_TICK(比较特殊,需要显示的注册) –> 时间改变,每分钟发送一次。如果连接,发送信息;没有连接,如果用户请求,发送请求消息。
 
2. 服务  .task.AssistService(单态模式)
   服务初始化:initHandler() 初始化消息处理器 —> HashMap<String, Handler>() 消息处理列表(静态方法)。
               initApp() 初始化应用程序 —> 显示注册广播接收者;    AliveConnectThread 启动在线连接线程。
                
               Environment.getExternalStorageDirectory() 获取sd卡路径。
               SharedPreferences  存储位置 /data/data/com.lenovo.assist/shared_prefs下。需要用root用户登录才能查看的到。
               ConversationThread作用是判断录音的类别。
 
3. activity管理:单例模式,内部hashMap变量存储各个类的handler对象,以便集中处理(activity之间传值最方便)。
   public abstract class LeAssistActivity extends Activity{ },程序中每个activity都实现抽象类LeAssistActivity。重写handleMsg方法。
   TopBarPane  TitleBarPane 标题栏。
   AppTimer类,对CountDownTimer类的一个封装。—- 没有必要吧。管理起来方便。
   LeAssistData类,
   BaseThread类,对线程封装,使 非UI线程 能够处理消息。
   (1)Looper类用来为一个线程开启一个消息循环。 (2) 通常是通过Handler对象来与Looper进行交互的。(3) 在非主线程中直接new Handler() 会报如下的错误。原因是非主线程中默认没有创建Looper对象,需要先调用Looper.prepare()启用Looper。   (4) Looper.loop(); 让Looper开始工作,从消息队列里取消息,处理消息。  
 
   
4. annotation的使用:
  最常见的annotation @Override:用在方法之上,用来告诉别人这一个方法是改写父类的
               @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
                @SuppressWarnings:暂时把一些警告信息消息关闭
               @Entity:表示该类是可持久化的类
 
   目前的问题是,提供一个包名(String),如何搜索这个包里有哪些类 —> 通过文件方式来查找(搜索目录下文件数量)。
   一种限定文本框只能输入数字的方法 e.doit = “0”.indexOf(e.text) >= 0;
 
5. 比较个性的bug及其修改:
   项目组统计消息推送敲定,为什么每次都要带上以前人回复情况。不用顾及以前的记录。
   项目组更新接口的敲定,为什么不单独一个一个来。修改内容的范围。
   项目组交互界面风格确定,为什么不是标题、内容风格。生活节奏快,需要把信息简单明确的展示出来。
   制定规则要从人本恶角度制定,执行管理时要从人本善角度出发。
   乐助理定位:沟通,打通桥梁,不是去实现日程功能。
   我能给你提供什么样的服务,而不是我去满足你的要求。
   尽量避免系统重构。
   为什么这么做,值不值。
   个人版对扫描二维码功能的看法 — 不是杂货铺。
   检查连接状态:心跳方式。        token被拒,不要一味的连接。    token代替imei,防止攻击 和 不同设备登录。
   日程系统中八点之前的问题 —> 时区设置。
   日程系统编辑crash —> 对内容提供者一个一个字段探视。导出日程数据库。
   对齐方式 —> gravity属性; layout_align属性; layout_margin属性。    
   启动方式 —> launchMode: standard(一直往上累加) , singleTop(顶部不累加) , singleTask(只有一个) , singleInstance         在startActivity时候,也可以设置。
   一个APK文件部署产生多个应用安装的效果 —> 配置多个<intent-filter> <action android:name=”android.intent.action.MAIN”></action>   <category android:name=”android.intent.category.LAUNCHER”></category> </intent-filter>
   android:sharedUserId —>通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样.
   android:installLocation,默认值,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.
   android:cacheColorHint属性,当多个被选中时的显示。
   在配置文件中无法配置sdk,原因是default.property 或者 project.property
   混淆 —> 需要较高版本的adt、sdk。  proguard也要最新版本、 反编译软件业要最新版本,否则无法解析。
   conversion to dalvik format failed with error 1 —> 混淆的sdk版本太低。去掉混淆即可,或者更新一下adt、sdk。
   修改编译器版本:工程,右键属性,Java Compiler,修改level为1.6
  json中内嵌json,还是内嵌字符串。   

   TabActivity与普通按钮跳转。– 效果vs框架,每种方法都有自己的出色之处,同时有不足。

   快捷提醒邀请人邀请参数设计。–可扩张性。

   
   ant工具使用,一步一步的。  为不同的渠道商打包签名apk。
   
   activity之间的切换,可以通过继承LeAssistActivity的消息传递机制来实现。     也可以通过广播的机制来实现(他的实质和前者一致,但是可以减少Activity之间的耦合)。
   判断应用程序在哪个界面:设置静态变量,onStart时赋值,onPause时清空变量。
   帮助导航界面:ViewGroup布局,处理自己写。
   显示未读数量界面:反射机制实现。不用 继承,解耦。
   小助手布局实现:一个线性布局,之后添加View显示。
   动画播放:系统的anim布局,默认一直播放,或者,mContext.runOnUiThread()方法限制播放时间; 或者引入gif播放的包。
   java并发执行(Executor):。
   录音界面建议:按一下录音,不说话,自动停止。— 唱歌不适合。
   长连接机制:HttpURLConnection连接。
   Base64编码机制:Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。
   触发与被触发的动作的使用:timer,间隔判断。
   运用for语句对同一集合中的元素执行同样命令。
   系统类AsyncTask<Params, Progress, Result>,参数为泛型;其实质是 对handler + 线程的封装;线程的控制是通过FutureTask类(各个子任务内部有序执行)、线程池、堵塞队列等控制。
   FutureTask<V> implements Future<V>, Runnable{}类,主要是对Sync类的使用。Sync extends AbstractQueuedSynchronizer{}是有序执行。
   WorkerRunnable<Params, Result> implements Callable<Result>{}类,作用是可以接收外部传入进来的参数。
   向HttpURLConnection中写入参数应该调用getOutputStream方法。OutputStream implements Closeable, Flushable{}类,Closeable接口有关闭方法,Flushable接口有flush方法。
   对未捕获的异常进行打印,即 某类实现UncaughtExceptionHandler接口。
   让子线程具有接受消息的能力,需要重新加入looper;或者 调用系统的HandlerThread类。
   manifest中注册内部类,<activity android:name=”.app.MessengerServiceActivities$Binding”>
   Handler能够自己定时给自己发送消息,mProgressHandler.sendEmptyMessageDelayed(0, 100);
   定时效果:驱动与被驱动。     接收到的消息 连续 判断。
   3击事件的处理,从OnTouch上做处理(连续次数)。
   Activit中启动线程与服务的区别:线程的生命周期与app生命周期一样,而不是与activity生命周期一样。
   程序健壮性判断,即断言判断。
   滑动,list列表的最后一项,或者第一项即可。从adapter入手。
 
 
6. 手机抓包过程:  
   Wireshark(前称Ethereal)是一个网络封包分析软件。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。
 
7. sudo 是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登陆 和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。
   sudo,super user do
 
8. 查看系统数据库:
   用的mv命令,把 数据库移动到data目录下; #mv /data/data/com.android.providers.calendar/databases/calendars.db  /data/222.db
   之后用 chmod命令,把数据库权限增大;    #chmod 777 /data/222.db
   最后,pull出来就可以了。   >>>>adb pull /data/222.db D:/333.db       
                 adb pull /mnt/sdcard/letest/leassist.log.htm C:\Users\liu\Desktop\leassist.htm

   android电话簿数据库位置:/data/data/com.android.providers.contacts/databases/contacts2.db









































































































免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131532.html

(0)
上一篇 2025-08-07 15:15
下一篇 2025-08-07 15:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信