Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. Android打印机项目 涉及的技术:
  2.  
  3. APP部分:
  4. 系统打印插件API
  5. APP基础:Activity、Broadcast、Service(四大组件中的三个)
  6. UI制作(Activity、Fragment、Dialog、Handler、各种Layout、Button、Listview)
  7. JAVA调用命令行使用Stream
  8. 线程池(管理命令的异步执行)
  9. 多线程同步(使用了synchronized、wait/notify,等待命令的stdout/stderr通道结束)
  10. AIDL(与通知栏进程通信,发送打印状态)
  11. Parcelable(数据序列化,给AIDL使用)
  12. 界面逻辑分离(MVC)
  13. 单例模式(线程池)
  14. 字符串匹配
  15.  
  16. 移植CUPS部分:
  17. Change Root
  18. Android权限管理(添加自定义权限)
  19. Linux程序动态链接程序运行原理
  20. Linux系统调用
  21. Shell脚本
  22. CUPS的运行流程(epoll管理、PPD文件指定渲染流程、前后端过滤器、libusb连接USB打印机)
  23. Android源码编译、添加系统程序
  24. ---
  25. 遇到的坑
  26. 1. AlertDialog如何在非APP界面弹出
  27. alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
  28. 但是在有的系统上无效。
  29. 2. PrintJob只能在主线程操作,否则操作无效
  30. (原因?)
  31. 3. APP进程退出,后台运行的CUPS进程也会退出
  32. 在Android中,APP所在进程被杀死,其启动的子进程也会被杀死。
  33. 解决方案一,在APP被杀死时,启动一个定时器,几秒后唤醒一个service。。。(暴力方法)
  34. 解决方案二,使用AIDL,启动两个APP/进程。
  35. (原因?)
  36. 4. Intent跨进程发送Parcelable数据,双方的类名必须相同
  37. 反序列化时类名,包括所在包名,必须完全相同。
  38. 5. 记得PrintJob是final类,而且不能Parcelable,使用反射来调用内部方法的。
  39. 但是找了半天,找不到在哪用的。。。
  40. 6. 在调用类的wait、notify方法时,必须使用synchronized。
  41. 防止并发操作,导致出错。
  42. 7. 调试网络打印时,发现无法打印,有问题。
  43. 使用tcpdump和wireshark抓包,发现无法打印的问题不在传输上。
  44. 8. USB打印出现问题,无法打印。
  45. 使用starce抓取系统调用,结合CUPS源码,发现问题出现libusb上面,自行编译libusb库解决。
  46. 9. 在AIDL中map不能使用泛型等
  47. 不使用泛型,可以用强转
  48. 10. 使用hpcups过滤器,无法使用以usb开头的地址。
  49. 在ubuntu中,系统会自动转换地址为 hp 开头,因此编写地址转换脚本,进行动态转换
  50. ---
  51. 如何组织项目
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement